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

Mun*_*esh 13 google-cloud-storage google-bigquery

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

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

Usage: bq extract <source_table> <destination_uris>
Run Code Online (Sandbox Code Playgroud)

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

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

我正在寻找任何更好的方法来通过执行以下操作来实现这一目标。

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

Sta*_*hov 10

最近添加了从 BigQuery Standard SQL 直接导出:将数据导出为 csv 格式

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


Tia*_*ica 8

您可以使用EXPORT DATA导出它,这可以将查询结果直接写入 GCS,例如

EXPORT DATA

[WITH CONNECTION connection_name]

OPTIONS (export_option_list) AS

query_statement
Run Code Online (Sandbox Code Playgroud)

或者只需三步即可使用 Web UI

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

步骤1

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

配置查询

这将打开以下内容

查询设置

在这里你想拥有

  • Destination:设置查询结果的目的表
  • 项目名称:选择项目。
  • 数据集名称:选择数据集。如果您没有,请创建它并返回。
  • 表名:任意命名(必须仅包含字母、数字或下划线)。
  • 结果大小:允许较大的结果(无大小限制)。

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

第2步

要将其导出到 GCP,您必须转到表并单击“导出”>“导出到 GCS”。

BigQuery 导出表

这将打开以下屏幕

导出到GCS

选择 GCS 位置中,您可以定义存储桶、文件夹和文件。

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

daria_bucket/test.csv
Run Code Online (Sandbox Code Playgroud)

如果文件太大(超过 1 GB),您会收到错误消息。要修复它,您必须使用通配符将其保存在更多文件中。所以,你需要添加*,就像这样

daria_bucket/test*.csv
Run Code Online (Sandbox Code Playgroud)

通配符导出至 GCS

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

步骤3

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

GCS铲斗

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


Mik*_*ant 6

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

  • 您能否添加有关如何使用 bq 命令使用临时表的更多详细信息 (3认同)

小智 5

对于 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
Run Code Online (Sandbox Code Playgroud)

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

gsutil mv employee.csv 'gs://XXXX/employee.csv'
Run Code Online (Sandbox Code Playgroud)


Ale*_*kin 2

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

  • 您能否添加有关如何使用 bq 命令使用临时表的更多详细信息 (2认同)