Automation BigQuery-从Google云存储传输自动化-覆盖表

Automation BigQuery-从Google云存储传输自动化-覆盖表,automation,google-bigquery,google-cloud-storage,overwrite,Automation,Google Bigquery,Google Cloud Storage,Overwrite,情况是这样的: 我们的客户每天将CSV(覆盖)上传到Google云存储中的一个存储桶(每个表位于不同的文件中) 我们在DataStudio中使用BigQuery作为数据源 我们希望自动将CSV传输到BigQuery 问题是,尽管我们: 使用“覆盖表”写入首选项在BigQuery中声明表 将每日传输vía UI(BigQuery>Transfers)配置为在文件上载到Google Cloud一小时后自动从Google Cloud上载CSV 默认情况下,自动传输/加载在“WRITE_APPEND

情况是这样的:

  • 我们的客户每天将CSV(覆盖)上传到Google云存储中的一个存储桶(每个表位于不同的文件中)
  • 我们在DataStudio中使用BigQuery作为数据源
  • 我们希望自动将CSV传输到BigQuery
问题是,尽管我们:

  • 使用“覆盖表”写入首选项在BigQuery中声明表
  • 将每日传输vía UI(BigQuery>Transfers)配置为在文件上载到Google Cloud一小时后自动从Google Cloud上载CSV
  • 默认情况下,自动传输/加载在“WRITE_APPEND”中,因此表在BigQuery中被追加而不是覆盖

    因此,问题是:我们如何/在何处可以改变

    configuration.load.writeDisposition=WRITE\u TRUNCATE

    如前所述,以便在自动加载CSV时覆盖表

    我想这就是我们所缺少的

    干杯。

    1)一种方法是在运行导入数据的查询之前对表使用DDL

    这是一个如何创建表的示例

    #standardSQL
     CREATE TABLE mydataset.top_words
     OPTIONS(
       description="Top ten words per Shakespeare corpus"
     ) AS
     SELECT
       corpus,
       ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words
     FROM bigquery-public-data.samples.shakespeare
     GROUP BY corpus;
    
    现在,它已创建,您可以导入数据

    2) 另一种方法是使用BigQuery调度查询


    3) 如果您编写Python,您可以找到一个更好的解决方案

    以上任何一项都不适用于我们,因此我将发布这篇文章,以防有人遇到同样的问题

    我们安排了一个查询,以便在自动导入过程开始之前删除表内容:

    DELETE FROM project.tableName WHERE true
    

    然后,新数据将导入到一个空表中,因此默认的“WRITE\u APPEND”不会影响我们。

    您在编写查询结果时使用哪个选项:Hi@TamirKlein,我们是
    bigquery.admin
    。这是您的writer访问权限。我的意思是,你是如何编写查询结果的,你是UI、Java还是其他?对不起@TamirKlein,我误解了你;我们通过UI做所有事情,但我们不执行任何需要存储的查询。目前我们只执行那些用于手动检查某些结果的,因此我们不需要将它们写入任何表中。我很困惑。无论如何,writeDisposition不是在表级别定义的,而是在写入表时定义的。因此,根据你的写作方式,你可以设置它。希望这有帮助。