我创建了一个包含两个工作表的Google表格电子表格,名为Sheet1
和Sheet2
:
https://docs.google.com/spreadsheets/d/1P1WH7cwVDaG6k-OQxKVXtnjBXI1NGFYvHD6IxCRFsZc/edit?usp=sharing
Sheet1
在第1行中包含col1
和col2
列,而第{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
获得结果。
问题出在哪里?
答案 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