我正面临着一个问题,或者更确切地说是一个挑战,我还没有弄清楚。并认为我可能需要帮助设置正确的方式,任何线索都会非常感谢。
我非常熟悉AWS,但最近迁移到GCP,负责设置ETL流,如果我在解释前面的流程时造成任何混乱,请原谅。
为了概述或寻求摘要,以下是当前我们的管道的设置方式:
我有一个生产桶,比如abc_prod,其中应用程序数据被填充在地板上,很少有人说:
的桶/文件夹中的拼花文件
bq_client = bigquery.Client() job_config = bigquery.LoadJobConfig() job_config.source_format = bigquery.SourceFormat.PARQUET #写截断将在后台覆盖现有数据job_config.write_disposition = "WRITE_TRUNCATE“# Executes查询作业,而无需等待其结果job = bq_client.load_table_from_uri(src_uri,table_ref,###引用表say location_inc,contacts_inc,etc job_config=job_config)
在下面的代码片段的帮助下,相同的python脚本读取上面的
bq_client = bigquery.Client() job_config = bigquery.QueryJobConfig(destination=table_id,对主表的###引用,例如location_main,contact_main等write_disposition="WRITE_APPEND") query_job =bq_client.query(查询,job_config)
现在,对于installed_apps和contact,执行上述管道时不会发生任何故障。
这里的关注点是location,对于location,直到第2步,一切都执行得很顺利。parquets被读和写在BQ "inc“数据库中。第三步,虽然代码被执行,但是来自"inc“DB的数据没有附加到"main”中。代码不会产生任何错误或任何可能导致我提前调试的警告。因此,我无法找出这背后的确切原因。我使用allow_large_results=True
作为QueryJobConfig
的参数,但仍然无法填充"location_main“。
我注意到的一件事是,如果我在几块location parquets上尝试它,它就会被填充。如果有人能给我提供一些见解,这将是一个很大的帮助。我一直在考虑这些问题--是由于大量的数据导致location_main无法填充,还是与拼板中不一致的数据类型有关,等等。
提前谢谢。
发布于 2022-06-20 08:02:19
我设法发现,有些宴会有额外的/意外的专栏。在为主服务器创建架构时,它是根据当时可用的列创建的。我发现我们可以在QueryJobConfig
中通过添加参数schema_update_options
来处理列的加法/松弛,参数schema_update_options
包含两个选项:“ALLOF字段_ addition”,“ALLOW_FIELD_RELAXATION”
例如:
job_config = \
bigquery.QueryJobConfig(destination=table_id,
write_disposition="WRITE_APPEND",
schema_update_options=['ALLOW_FIELD_ADDITION','ALLOW_FIELD_RELAXATION'])
https://stackoverflow.com/questions/72520490
复制相似问题