【问题标题】:BigQuery - Export query results to local file/Google storageBigQuery - 将查询结果导出到本地文件/Google 存储
【发布时间】:2018-11-03 01:45:58
【问题描述】:

我想将查询结果从 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'

【问题讨论】:

    标签: google-bigquery google-cloud-storage


    【解决方案1】:

    最近添加了从 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 
    

    【讨论】:

      【解决方案2】:

      正如Mikhail Berlyant 所说,

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

      您仍然可以使用 Web UI 只需三个步骤即可将其导出

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

      步骤 1

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

      这将打开以下内容

      这里是你想要的

      • 目标:为查询结果设置目标表
      • 项目名称:选择项目。
      • 数据集名称:选择一个数据集。如果您没有,请创建并返回。
      • 表格名称:随便取一个名字(必须只包含字母、数字或下划线)。
      • 结果大小:允许较大的结果(没有大小限制)。

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

      第二步

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

      这将打开以下屏幕

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

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

      daria_bucket/test.csv
      

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

      daria_bucket/test*.csv
      

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

      第三步

      然后转到 Storage,您会看到存储桶。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 能否请您添加有关如何使用 bq 命令使用临时表的更多详细信息
        • 这并不完全正确。您可以将查询结果保存到本地文件bq query --format=csv --max_rows=9999 --use_legacy_sql=false "SELECT * FROM dataset.table;" &gt; result.csv。这适用于中小型结果。但不适用于返回千兆字节数据的查询。
        • @Igor-S - 问题明确是关于 extract 所以这里的答案主要集中在这方面。所以这里的重点与您的答案中的实际情况完全相同 - 您可以查询然后以不同的方式操作结果。您的答案使用bq query ... &gt; file.ext,这也是合法的。但上面(我的)和其他对提取物说“否”的答案仍然正确:o)
        【解决方案4】:

        对于 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'
        

        【讨论】:

          【解决方案5】:

          这些天(直到他们再次更改控制台)您可以通过

          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】:

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

            【讨论】:

            • 能否请您添加有关如何使用 bq 命令使用临时表的更多详细信息
            【解决方案7】:

            正如@MikhailBerlyan 指出的那样,您需要一个中间表。您可以使用 BigQuery 用户界面来完成:

            • 运行过滤查询(在您的情况下,'select dept_id,sum(sal) from temp.employee group by dept_id')。
            • 查询完成后点击Save as-&gt;Save as table。此步骤创建完成过滤的中间表。
            • 打开该表,然后在最右侧单击Export-&gt;Export to GCS

            这是exporting 的文档。

            【讨论】:

            • UI 已更改,不再有save as table。另请注意,您必须启用正确的权限,否则这将不起作用。
            【解决方案8】:

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

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

            bq --location=&lt;your GCP Zone&gt; --destination_format CSV &lt;dataset-id&gt;:&lt;table-name&gt; gs://&lt;gcp-bucket&gt;/&lt;dump-file-name&gt;.csv

            【讨论】:

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