【问题标题】:Extract BigQuery partitioned table提取 BigQuery 分区表
【发布时间】:2019-07-02 14:38:09
【问题描述】:

有没有办法用一个命令提取完整的 BigQuery 分区表,以便将每个分区的数据提取到格式为 part_col=date_yyyy-mm-dd 的单独文件夹中

既然 Bigquery 分区表可以从 hive 类型的分区目录中读取文件,有没有办法以类似的方式提取数据。我可以单独提取每个分区,但是当我提取很多分区时这非常麻烦

【问题讨论】:

  • 似乎是问题跟踪器的功能请求

标签: google-bigquery


【解决方案1】:

您可以通过编程方式执行此操作。比如你可以export partitioned data by using the partition decorator比如table$20190801。然后在 bq extract 命令上,您可以对 GCS 对象使用 URI Patterns(查看工人模式的示例)。

由于所有对象都在同一个存储桶中,因此文件夹只是an hierarchical illusion,因此您也可以在文件夹上指定 URI 模式,但不能在存储桶上。

所以你会做一个循环遍历 DATE 值的脚本,比如:

bq extract 
--destination_format [CSV, NEWLINE_DELIMITED_JSON, AVRO] 
--compression [GZIP, AVRO supports DEFLATE and SNAPPY] 
--field_delimiter [DELIMITER] 
--print_header [true, false] 
[PROJECT_ID]:[DATASET].[TABLE]$[DATE]
gs://[BUCKET]/part_col=[DATE]/[FILENAME]-*.[csv, json, avro]

您不能仅使用 bq 命令自动执行此操作。为此,按照 Felipe 的建议,raise a feature request 会更好。

【讨论】:

  • 感谢 Neri,我已经以编程方式实现了这一点,但我只是好奇我们是否可以使用单个命令来实现。正如您和 Felipe 确认的那样,这样的功能不存在,将提出功能请求
  • 您好,当我运行此 bq 提取 --destination_format=CSV test_dataset.test_partitiontime$20210716 gs://testbucket/part_col=20210716/test.csv,我得到此输出`未找到:表 test-net :temp.test_partitiontime0210716 在位置 EU ` 中找不到。我的表是按日期分区的,你认为可能是什么问题? ps:通常我有 2021-07-16 日期的 7k 行 -
  • 嗨,艾米丽,尝试用反斜杠转义 $,您可能正在使用 bash shell,并且 $2 被视为被空白值替换的变量
  • 如果有人可以根据表的类型导出 bigquery 数据集,请分享脚本。
【解决方案2】:

在运行以下命令之前使用gcloud init将项目设置为test_dataset

bq extract --destination_format=CSV 'test_partitiontime$20210716' gs://testbucket/20210716/test*.csv

这将在testbucket 内创建一个名为20210716 的文件夹并将文件写入那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多