【问题标题】:Using variables in BigQuery DDL with external GCS bucket将 BigQuery DDL 中的变量与外部 GCS 存储桶一起使用
【发布时间】:2021-02-13 07:25:32
【问题描述】:

仅使用 BigQuery 数据定义语言和标准 SQL,是否可以将当前日期用作变量以将其用作以下查询中的 gs:// 路径?

CREATE OR REPLACE EXTERNAL TABLE staging.my_table
OPTIONS (
  format = 'NEWLINE_DELIMITED_JSON',
  uris = ['gs://bucket/path/to/logs/2020-10-08/*.jsonl']
)

【问题讨论】:

  • 你试过了吗?
  • DECLARE foo STRING DEFAULT '2020-10-28'; CREATE OR REPLACE EXTERNAL TABLE staging.my_table OPTIONS (format = 'NEWLINE_DELIMITED_JSON', uris = ['gs://bucket/path/to/logs/@foo/*.jsonl']) 丢弃一个错误,说存储桶不存在
  • 你有什么?
  • “无效值:读取表时出错:my_table,错误消息:无法读取表 my_table,因为 uris 与任何数据都不匹配。在 [3:1]”并且硬编码日期当然可以.
  • 你试过EXECUTE IMMEDIATE吗?应该工作!

标签: google-bigquery google-cloud-storage


【解决方案1】:
EXECUTE IMMEDIATE format("""
  CREATE OR REPLACE EXTERNAL TABLE staging.my_table
  OPTIONS (
    format = 'NEWLINE_DELIMITED_JSON',
    uris = ['gs://bucket/path/to/%s/*.jsonl']
  )
""", CAST(CURRENT_DATE() AS STRING));

最好的做法是在 GCS 上使用 Hive partitioning

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 1970-01-01
    • 2014-04-26
    • 2021-01-17
    • 2018-08-16
    • 2021-11-02
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多