【问题标题】:BigQuery - Transfers automation from Google Cloud Storage - Overwrite tableBigQuery - 从 Google Cloud Storage 传输自动化 - 覆盖表
【发布时间】:2019-05-29 04:15:36
【问题描述】:

情况是这样的:

  • 我们的客户每天都会将 CSV 文件(被覆盖)上传到 Google Cloud Storage 中的存储桶(每个表位于不同的文件中)。
  • 我们在 DataStudio 中使用 BigQuery 作为数据源
  • 我们希望将 CSV 自动传输到 BigQuery。

问题是,即使我们已经:

  1. 使用“覆盖表”写入首选项选项在 BigQuery 中声明表
  2. 通过 UI(BigQuery > Transfers)配置每日传输以在文件上传到 Google Cloud 后一小时自动从 Google Cloud 上传 CSV,as stated by the limitations

默认情况下,自动传输/加载在“WRITE_APPEND”中,因此在 BigQuery 中表被追加而不是被覆盖。

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

configuration.load.writeDisposition = WRITE_TRUNCATE

here 所述,以便在自动加载 CSV 时覆盖表格?

我认为这就是我们所缺少的。

干杯。

【问题讨论】:

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

标签: automation google-bigquery google-cloud-storage overwrite


【解决方案1】:

以上都不适合我们,所以我发布这个以防万一有人遇到同样的问题。

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

DELETE FROM project.tableName WHERE true

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

【讨论】:

    【解决方案2】:

    1) 一种方法是在运行导入数据的查询之前使用 DDL CREATE and REPLACE 您的表。

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

    #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,您可以找到更好的解决方案 here

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 2014-09-18
      • 2020-03-03
      • 1970-01-01
      • 2018-01-28
      • 2020-01-19
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      相关资源
      最近更新 更多