BigQuery - 将查询结果导出到本地文件/ Google存储空间

时间:2018-05-23 23:56:48

标签: google-bigquery google-cloud-storage

我想将BigQuery的查询结果导出到本地文件/ Google存储空间。

我试过'bq extract'命令,但它不允许查询作为输入。

Usage: bq extract <source_table> <destination_uris>

我不想提取整个表,因为该表包含许多不需要的列,我需要聚合数据。

截至目前,我能找到的唯一解决方法是使用'bq query'命令创建一个表,并使用'bq extract'来提取数据。

我正在寻找通过以下方式实现这一目标的更好方法。

bq extract 'select dept_id,sum(sal) from temp.employee 
                                 group by dept_id' 'gs://XXXX/employee.csv'

提前致谢

8 个答案:

答案 0 :(得分:3)

对于gcloud cli不支持的操作,您始终可以使用bash脚本。 例如,您可以将查询结果转储到文件中:

bq query --format=csv --max_rows=999999 --use_legacy_sql=false\
  "select dept_id,sum(sal) from temp.employee group by dept_id" > employee.csv

然后您可以将其上传到云存储中:

gsutil mv employee.csv 'gs://XXXX/employee.csv'

答案 1 :(得分:2)

BigQuery不提供将查询结果直接导出/下载到GCS或本地文件的功能。首先,您需要在显式设置的目标表中获取查询结果,或者如果未设置,您可以使用保存查询结果的临时(匿名)表 - 您可以从相应的作业属性configuration.query.destinationTable获取它(表)完成)
然后,您可以将该表用作导出作业的来源

答案 2 :(得分:1)

不支持过滤导出。 您可以将查询结果存储为另一个临时表并导出该表,这将是两个步骤。

答案 3 :(得分:1)

Mikhail Berlyant说,

  

BigQuery不提供直接导出/下载查询的功能   结果保存到GCS或本地文件中。

您仍然可以通过三个步骤使用Web UI导出它

  1. 配置查询以将结果保存到BigQuery表中并运行它。
  2. 将表格导出到GCS中的存储桶。
  3. 从存储桶中下载。

步骤1

在BigQuery屏幕中,运行查询之前,请转到“更多>查询设置”

Configure Query

这将打开以下内容

Query Settings

您想在这里

  • 目标:设置查询结果的目标表
  • 项目名称:选择项目。
  • 数据集名称:选择一个数据集。如果您没有,请创建它并回来。
  • 表名:提供您想要的任何名称(必须仅包含字母,数字或下划线)。
  • 结果大小:允许较大的结果(没有大小限制)。

然后将其保存,并将查询配置为保存在特定表中。现在您可以运行查询。

步骤2

要将其导出到GCP,您必须转到表格,然后点击导出>导出到GCS。

BigQuery export table

这将打开以下屏幕

Export to GCS

选择GCS位置中,定义存储区,文件夹和文件。

例如,您有一个名为 daria_bucket 的存储桶(仅使用小写字母,数字,连字符(-)和下划线(_)。点(。)可以用于形成一个有效的域名。),并想将文件保存到名称为 test 的存储桶的根目录中,然后编写(在“选择GCS位置”中)

daria_bucket/test.csv

如果文件太大(超过1 GB),则会出现错误。要修复它,您必须使用通配符将其保存在更多文件中。因此,您需要添加*,就像这样

daria_bucket/test*.csv

Wildcard export to GCS

这将在表daria_bucket的内部存储从表中提取的所有数据到多个文件中,这些文件名为test000000000000,test000000000001,test000000000002,... testX。

步骤3

然后转到存储,您将看到存储桶。

GCS bucket

深入其中,您会找到一个(或多个)文件。然后您可以从那里下载。

答案 4 :(得分:0)

@MikhailBerlyan指出,您需要一个中间表。您可以使用BigQuery用户界面来做到这一点:

  • 运行查询以进行过滤(在您的情况下,“从temp.employee组中按dept_id选择dept_id,sum(sal)”)。
  • 查询完成后,单击Save as->Save as table。此步骤将创建完成过滤的中间表。
  • 打开该表,然后在最右侧单击Export->Export to GCS

以下是exporting的文档。

答案 5 :(得分:0)

这几天(直到他们再次更改控制台),您可以通过以下方式实现

1_ run your query   
2_ when it is completed, then you can use "Save the result" dropdown
to save it in a *local/cloud* file.

请注意,当前在命令行或API调用中不支持此选项:-)

答案 6 :(得分:0)

最近添加了从BigQuery Standard SQL直接导出的功能:Exporting data to csv format

EXPORT DATA OPTIONS(
  uri='gs://mybucket/myfolder2/*.csv',
  format='CSV',
  overwrite=true,
  header=true,
  field_delimiter=';') AS
SELECT 1 as field1, 2 as field2 

答案 7 :(得分:0)

我的公司尚未订阅 Google Drive,因此我们使用此解决方法 -

  1. 在 BQ 查询编辑器中运行查询。
  2. 点击 Save Query Results 并从 Bigquery Table 下拉菜单中选择 Choose where to save the results data from the query
  3. 选择项目名称、数据集名称,并提供一个表名,例如 data_dump_13_jan,然后点击保存。
  4. 根据数据集的不同,这可能需要几秒钟到几小时的时间。
  5. 工作完成后,转到 Cloud Shell 终端并运行以下命令。

bq --location=<your GCP Zone> --destination_format CSV <dataset-id>:<table-name> gs://<gcp-bucket>/<dump-file-name>.csv