【问题标题】:How do you run a saved query from Big Query cli and export result to CSV?如何从 Big Query cli 运行保存的查询并将结果导出到 CSV?
【发布时间】:2018-03-01 07:24:31
【问题描述】:

我在 Big Query 中有一个已保存的查询,但它太大而无法导出为 CSV。我没有导出到新表的权限,所以有没有办法从bq cli 运行查询并从那里导出?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    从 CLI 中,您无法直接访问已保存的查询,因为它现在是一个仅限 UI 的功能,但正如 here 解释的那样,有一个功能请求。

    如果您只想运行一次以获得结果,您可以从 UI 中复制查询,然后在使用 bq 时将其粘贴。

    使用文档example query,您可以使用公共数据集尝试以下操作:

    QUERY="SELECT word, SUM(word_count) as count FROM publicdata:samples.shakespeare WHERE word CONTAINS 'raisin' GROUP BY word"
    bq query $QUERY > results.csv
    

    cat results.csv 的输出应该是:

    +---------------+-------+
    |     word      | count |
    +---------------+-------+
    | dispraisingly |     1 |
    | praising      |     8 |
    | Praising      |     4 |
    | raising       |     5 |
    | dispraising   |     2 |
    | raisins       |     1 |
    +---------------+-------+
    

    只需将 QUERY 变量替换为您保存的查询即可。 此外,take into account 如果您使用带有 --use_legacy_sql 标志的标准或旧版 SQL。

    参考文档here

    【讨论】:

      【解决方案2】:

      尽管您可能从官方文档中了解到,您可以从bq query 获得大量查询结果,但您必须注意多个细节。

      首先,这是一个示例。我使用following commands从公共数据集bigquery-public-data中获取了公共表usa_names.usa_1910_2013的所有行:

      total_rows=$(bq query --use_legacy_sql=false --format=csv "SELECT COUNT(*) AS total_rows FROM \`bigquery-public-data.usa_names.usa_1910_2013\`;" | xargs | awk '{print $2}');
      bq query --use_legacy_sql=false --max_rows=$((total_rows + 1)) --format=csv "SELECT * FROM \`bigquery-public-data.usa_names.usa_1910_2013\`;" > output.csv
      

      此命令的结果是一个包含 5552454 行的 CSV 文件,前两行包含标题信息。这个表的行数是5552452,所以check out。

      以下是需要注意的地方:

      • 不管documentation might seem to say 的具体查询下载限制是什么,这些限制似乎只适用于Web UI,这意味着bq 不受这些限制;
      • 起初,我使用 Cloud Shell 来运行这个 bq 命令,但是行数太大以至于将结果集流式传输到其中会杀死 Cloud Shell 实例!我必须使用至少与n1-standard-4(4vCPU,16GiB RAM)具有相同资源的 Compute 实例,即使使用所有这些 RAM,查询也花了我 10 分钟才能完成(请注意,查询本身运行服务器-side,只是缓冲结果的问题);
      • 我正在手动复制粘贴查询本身,因为似乎没有办法直接从 bq 引用已保存的查询;
      • 您不必使用标准 SQL,但您必须指定 max_rows,否则它只会返回 100 行(100 是此参数的当前默认值) ;
      • 您仍将面对与 BigQuery 关联的常见 quotas & limits,因此您可能希望将其作为批处理作业运行,这取决于您。此外,不要忘记查询的最大响应大小为 128 MiB,因此您可能需要将查询拆分为多个 bq query 命令,以免达到此大小限制。如果您想要一个足够大以在查询期间达到此限制的公共表,请尝试使用 bigquery-public-data 数据集中的 samples.wikipedia 表。

      我想就是这样!只需确保您在强大的机器上运行这些命令,经过几次尝试,它应该会给您想要的结果!

      P.S.:目前有一项功能要求增加您可以从 Web UI 下载的 CSV 文件的大小。 You can find it here.

      【讨论】:

        猜你喜欢
        • 2021-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        相关资源
        最近更新 更多