有没有办法可以在不创建表格的情况下从select语句(BigQuery)将数据导出到谷歌云存储。
我需要每天根据select语句(BigQuery)提取数据,并将文件放在google云端存储中。
我知道我们可以通过以下方式从BigQuery导出。
bq query --destination_table = mydataset.happyhalloween“SELECT name,count FROM mydataset.babynames WHERE gender ='M'ORDER BY count DESC LIMIT 6” bq extract'bigquery-public-data:samples.shakespeare'gs://example-bucket/shakespeare.csv
让我知道有没有办法从Bigquery select语句导出数据到谷歌云存储,而无需创建临时表。
谢谢,
答案 0 :(得分:2)
查询结果为always saved to either a temporary or permanent table。
当您指定目标表时,这是一个永久表,但如果您不指定,则BigQuery会创建一个短期临时表来存储结果。如果您查看查询历史记录部分,则可以看到这些临时表的名称。
当指定临时表作为源时,我成功地能够将导出作业运行到云存储。
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"
},
...
}
答案 1 :(得分:1)
使用 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'