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

Google bigquery BigQuery-将查询结果导出到本地文件/Google存储,google-bigquery,google-cloud-storage,Google Bigquery,Google Cloud Storage,我想将查询结果从BigQuery导出到本地文件/Google存储 我尝试了'bq extract'命令,但它不允许将查询作为输入 Usage: bq extract <source_table> <destination_uris> 不支持为导出进行筛选。 您可以将查询结果存储为另一个临时表并导出此表,因此这将是一个两步过程。BigQuery不提供将查询结果直接导出/下载到GCS或本地文件的功能。首先,您需要在显式设置的目标表中获取查询结果,如果未设置,则可以使用保存查

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

我尝试了'bq extract'命令,但它不允许将查询作为输入

Usage: bq extract <source_table> <destination_uris>

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

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

然后,您可以使用该表作为导出作业的源

,正如@MikhailBerlyan指出的,您需要一个中间表。您可以使用BigQuery UI执行此操作:

  • 运行查询以进行筛选(“在您的案例中,按部门id从临时员工组中选择部门id、总和(sal))
  • 查询完成后,单击
    另存为->另存为表
    。此步骤创建完成筛选的中间表
  • 打开该表,在最右侧单击
    导出->导出到地面军事系统
这是您的文档

现在(直到他们再次更换控制台),你可以通过

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调用不支持此选项:-)

,如前所述


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

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

  • 配置查询以将结果保存在BigQuery表中并运行它
  • 将表格导出到GCS中的存储桶
  • 从bucket下载
  • 第一步 在BigQuery屏幕中,在运行查询之前,转到更多>查询设置

    这将打开以下窗口

    这是你想要的

    • 目的地:设置查询结果的目的地表
    • 项目名称:选择项目
    • 数据集名称:选择一个数据集。如果你没有,创建它然后回来
    • 表名:给出您想要的任何名称(必须只包含字母、数字或下划线)
    • 结果大小:允许大的结果(没有大小限制)
    然后保存它,查询被配置为保存在特定的表中。现在可以运行查询了

    步骤2 要将其导出到GCP,您必须转到表格并单击导出>导出到GCS

    这将打开以下屏幕

    选择GCS位置中定义存储桶、文件夹和文件

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

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

    daria_bucket/test*.csv
    

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

    步骤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'
    

    最近添加了从BigQuery标准SQL直接导出:


    我的公司尚未订阅google drive,因此我们使用此解决方案-

  • 在BQ查询编辑器中运行查询
  • 单击
    保存查询结果
    并从
    下拉列表中选择
    Bigquery Table
    ,从查询
    下拉列表中选择结果数据的保存位置
  • 选择项目名称、数据集名称,并提供一个表名,例如data_dump_13_jan,然后单击save
  • 根据数据集的不同,可能需要几秒钟到几个小时
  • 作业完成后,转到cloud shell终端并运行以下命令

  • bq--location=--destination\u format CSV:gs://.CSV

    能否请您添加有关如何使用bq命令使用临时表的更多详细信息这不太正确。您可以将查询结果保存到本地文件
    bq query--format=csv--max_rows=9999--use_legacy_sql=false“SELECT*FROM dataset.table;”>result.csv
    。这将适用于中小规模的结果。但对于返回千兆字节数据的查询来说并不太好。@Igor-S-问题是关于提取的,所以这里的答案主要集中在这方面。所以这里的要点和你的答案完全一样——你可以用不同的方式查询并处理结果。您的答案使用
    bq查询…>file.ext
    ,这也是合法的。但是上面(我的)和其他对摘录说“不”的答案仍然正确:o)您可以添加更多关于如何使用bq命令使用临时表的详细信息吗用户界面已经更改,不再有
    另存为表
    。另外请注意,您必须启用正确的权限,否则这将不起作用。
    
    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'
    
    EXPORT DATA OPTIONS(
      uri='gs://mybucket/myfolder2/*.csv',
      format='CSV',
      overwrite=true,
      header=true,
      field_delimiter=';') AS
    SELECT 1 as field1, 2 as field2