问题描述
使用 Google 云的数据库仓库 BigQuery 导出数据到 GS 存储桶中的过程中,出现错误:
Invalid uri specification. Option ‘uri’ value must be a wild card URI.
- 所执行的 BigQuery 的语句如下:
EXPORT DATA OPTIONS(
uri='gs://test_bucket/GENERATEDB_DATA.csv',
format='CSV',
overwrite=true,
header=true,
field_delimiter=',') AS
SELECT * FROM `test.test_table`
limit 50;
执行后,在命令窗口会出现错误提示,如下图所示:
原因分析:
从错误信息提示可以看到, 错误的原因是 URI 不正确。最终的解决办法也是修改 URI 的路径,那么到底如为什么会不正确,这里来解释一下。
首先在 GCP 中正常的官方给出的 export data 语句如下:
EXPORT DATA OPTIONS(
uri='gs://bucket/folder/*.csv',
format='CSV',
overwrite=true,
header=true,
field_delimiter=';') AS
SELECT field1, field2 FROM mydataset.table1 ORDER BY field1 LIMIT 10
注意上面的 uri 的值是一个固定写法也就是 gs:// + bucket的名字 + 文件夹(可选) + 通配的csv文件名
。而 EXPORT DATA 语法不支持直接写单个文件导出。官方的说明点击这里。
解决方案:
修改 EXPORT DATA 语法,将 uri 改成通配符表达式,代码如下:
EXPORT DATA OPTIONS(
uri='gs://test_bucket/GENERATEDB_DATA_*.csv',
format='CSV',
overwrite=true,
header=true,
field_delimiter=',') AS
SELECT * FROM `test.test_table`
limit 50;
最后再次执行成功后,在 GS 存储桶中可以看到导出的文件:
补充:BigQuery 支持在每个 URI 中使用单个通配符运算符 (*)。通配符可以出现在 URI 中的任何位置,但不能包含在存储桶的名称中。使用通配符运算符可指示 BigQuery 根据所提供的模式创建多个分片文件。通配符运算符会替换为数字(从 0 开始),并向左填充 12 位。例如,如果 URI 的文件名末尾处带有通配符,那么在创建文件时,第一个文件的名称末尾会附加 000000000000,第二个文件的名称末尾会附加 000000000001,依次类推。
[ 本文作者 ] bluetata
[ 原文链接 ] https://bluetata.blog.csdn.net/article/details/135508108
[ 最后更新 ] 01/10/2024 18:16
[ 版权声明 ] 如果您在非 CSDN 网站内看到这一行,
说明网络爬虫可能在本人还没有完整发布的时候就抓走了我的文章,
可能导致内容不完整,请去上述的原文链接查看原文。