bigQuery Google Drive使用googleSheetsOptions范围查询多个工作表

时间:2018-05-31 15:09:24

标签: google-sheets google-drive-api google-bigquery

我创建了一个包含两个工作表的Google表格电子表格,名为Sheet1Sheet2

https://docs.google.com/spreadsheets/d/1P1WH7cwVDaG6k-OQxKVXtnjBXI1NGFYvHD6IxCRFsZc/edit?usp=sharing

Sheet1在第1行中包含col1col2列,而第{1}}在第1行中包含Sheet2列和col3

我希望能够使用命令行bigQuery接口查询两个工作表。 在2018年5月添加最新功能之前,似乎无法做到这一点:

https://issuetracker.google.com/issues/35905674#comment12

我试图复制这条评论所描述的内容,但我无法让它发挥作用。这是我到目前为止所做的:

新功能的说明显示了一个示例col4,如下所示:

google_sheets_tabeledef.json

鉴于我的电子表格包含两张表{ "autodetect": false, "sourceFormat": "GOOGLE_SHEETS", "sourceUris": [ "https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxx" ], "maxBadRecords": 1, "googleSheetsOptions": { "range": "test_sheet!A1:B20", "skipLeadingRows": 0 }, "schema" : { "fields": [ { "name": "col1", "type": "string" }, { "name": "col2", "type": "int64" }, ] } } Sheet1,我在bigQuery帐户中创建了各自的表格, 然后我尝试通过命令行Sheet2查询每一个。它的工作方式如bq query

所示
Sheet1

如果我为bq query --format=csv --use_legacy_sql=false 'SELECT * FROM `cegx-test-project1.multi_sheet_test.Sheet1`' 2>/dev/null col1,col2 col1,col2 foo,bar abc,def 尝试相同的操作,如果没有external_table_definition,则会显示:

Sheet2

因此它基本上恢复到第一个工作表而不是查询bq query --format=csv --use_legacy_sql=false 'SELECT * FROM `cegx-test-project1.multi_sheet_test.Sheet2`' 2>/dev/null col3,col4 col1,col2 foo,bar abc,def 。到目前为止,正如预期的那样。

然后我创建了一个等效的Sheet2文件,如下所示:

google_sheets_sheet2_tabledef.json

请注意在{ "autodetect": true, "sourceFormat": "GOOGLE_SHEETS", "sourceUris": [ "https://docs.google.com/spreadsheets/d/1P1WH7cwVDaG6k-OQxKVXtnjBXI1NGFYvHD6IxCRFsZc" ], "maxBadRecords": 1, "googleSheetsOptions": { "range": "Sheet2!A1:B10", "skipLeadingRows": 0 }, "schema" : { "fields": [ {"name":"col3","type":"string"}, {"name":"col4","type":"string"} ] } } 参数中,我指的是range

如果我再次尝试查询表,现在使用external_table_definition标志,我得到:

Sheet2!A1:B10

即使外部定义文件指向bq query --external_table_definition="Sheet2::/tmp/google_sheets_sheet2_tabledef.json" --format=csv --use_legacy_sql=false 'SELECT * FROM `cegx-test-project1.multi_sheet_test.Sheet2`' 2>/dev/null col3,col4 col1,col2 foo,bar abc,def 中的范围,我仍然可以从Sheet1获得结果。

问题出在哪里?

1 个答案:

答案 0 :(得分:1)

看起来您用于从临时外部表定义查询的命令不是指外部表。

如果将命令更改为以下命令,它应该按预期工作:

bq query --external_table_definition =“Sheet2 :: / tmp / google_sheets_sheet2_tabledef.json”--format = csv --use_legacy_sql = false'CELECT * FROM Sheet2'2> / dev / null