【问题标题】:Export data to google cloud storage from BigQuery select statement without temp table从没有临时表的 BigQuery 选择语句将数据导出到谷歌云存储
【发布时间】:2017-12-03 07:45:16
【问题描述】:

有什么方法可以在不创建表的情况下从 select 语句 (BigQuery) 将数据导出到谷歌云存储。

我需要每天根据 select 语句 (BigQuery) 提取数据并将文件放入谷歌云存储中。

我知道我们可以通过以下方式从 BigQuery 导出。

  1. 命令行——在这个选项中,我需要创建一个临时表。如果没有临时表,我看不到任何示例或语法。

bq query --destination_table=mydataset.happyhalloween "SELECT name,count FROM mydataset.babynames WHERE gender = 'M' ORDER BY count DESC LIMIT 6" bq 提取 'bigquery-public-data:samples.shakespeare' gs://example-bucket/shakespeare.csv

  1. WebConsole -- 由于需要安排,此选项已停用
  2. API -- 使用 API 我也无法从 SQL 查询中看到。我看到了整个表格的示例。

让我知道有什么方法可以在不创建临时表的情况下从 Bigquery 选择语句将数据导出到谷歌云存储。

谢谢,

【问题讨论】:

  • 为什么你认为临时表对你来说是个问题?
  • 我没有 BigQuery 的写入权限,只有存储桶的选择权限和完全权限。所以寻找将文件直接放入存储而不是临时表的选项。

标签: google-bigquery google-cloud-storage


【解决方案1】:

查询结果为always saved to either a temporary or permanent table

当您指定目标表时,即为永久表,但如果您不指定,BigQuery 会创建一个短期临时表来存储结果。如果您查看查询历史记录部分,您可以看到这些临时表的名称。

在将临时表指定为源时,我成功地能够将导出作业运行到 Cloud Storage。

bq extract my-project:_63cfa3...c5d1ef7 gs://my-bucket/my_table.csv

关于使用API​​,插入后得到作业就可以看到目标表。

https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/get

在我的示例中,获取与查询作业关联的作业 ID 的响应显示

{
 "kind": "bigquery#job",
 "id": "my-project:bquijob_ca7e64e_15cf54562fb",
 "jobReference": {
  "projectId": "my-project",
  "jobId": "bquijob_ca7e64e_15cf54562fb"
 },
 "configuration": {
  "query": {
   "query": "SELECT \"ABC\"",
   "destinationTable": {
    "projectId": "my-project",
    "datasetId": "_63cfa399614a54153cc386c27d6c0c6fdb249f9e",
    "tableId": "anondca79e1ad06d03be556f3fc3fdbaaf2b9c5d1ef7"
   },
   "createDisposition": "CREATE_IF_NEEDED",
   "writeDisposition": "WRITE_TRUNCATE",
   "useLegacySql": false
  }
 },
 "status": {
  "state": "DONE"
 },
...
}

【讨论】:

    【解决方案2】:

    使用 BigQuery SQL 提供的 EXPORT DATA OPTIONS 命令

    查询:

    EXPORT DATA OPTIONS(uri="gs://example-bucket/shakespeare.csv",format='csv') AS SELECT name,count FROM mydataset.babynames WHERE gender = 'M' ORDER BY count DESC LIMIT 6
    

    所以使用 'bq' 命令行实用程序会是这样的

    bq query --format=prettyjson --use_legacy_sql=false 'EXPORT DATA OPTIONS(uri="gs://example-bucket/shakespeare.csv",format='csv') AS SELECT name,count FROM mydataset.babynames WHERE gender = 'M' ORDER BY count DESC LIMIT 6'
    

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 2017-02-10
      • 2016-06-07
      • 2018-09-05
      • 2020-02-15
      • 1970-01-01
      • 2018-10-30
      • 2019-09-22
      • 2018-10-11
      相关资源
      最近更新 更多