[ Google - GCP ] 解决办法:BigQuery错误,Invalid uri specification. Option uri value must be a wild card URI

旧城等待, 2024-02-05 23:21 145阅读 0赞

问题描述

使用 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 语句如下:

  1. EXPORT DATA OPTIONS(
  2. uri='gs://bucket/folder/*.csv',
  3. format='CSV',
  4. overwrite=true,
  5. header=true,
  6. field_delimiter=';') AS
  7. SELECT field1, field2 FROM mydataset.table1 ORDER BY field1 LIMIT 10

注意上面的 uri 的值是一个固定写法也就是 gs:// + bucket的名字 + 文件夹(可选) + 通配的csv文件名。而 EXPORT DATA 语法不支持直接写单个文件导出。官方的说明点击这里。


解决方案:

修改 EXPORT DATA 语法,将 uri 改成通配符表达式,代码如下:

  1. EXPORT DATA OPTIONS(
  2. uri='gs://test_bucket/GENERATEDB_DATA_*.csv',
  3. format='CSV',
  4. overwrite=true,
  5. header=true,
  6. field_delimiter=',') AS
  7. SELECT * FROM `test.test_table`
  8. limit 50;

最后再次执行成功后,在 GS 存储桶中可以看到导出的文件:

在这里插入图片描述

补充:BigQuery 支持在每个 URI 中使用单个通配符运算符 (*)。通配符可以出现在 URI 中的任何位置,但不能包含在存储桶的名称中。使用通配符运算符可指示 BigQuery 根据所提供的模式创建多个分片文件。通配符运算符会替换为数字(从 0 开始),并向左填充 12 位。例如,如果 URI 的文件名末尾处带有通配符,那么在创建文件时,第一个文件的名称末尾会附加 000000000000,第二个文件的名称末尾会附加 000000000001,依次类推。

  1. [ 本文作者 ] bluetata
  2. [ 原文链接 ] https://bluetata.blog.csdn.net/article/details/135508108
  3. [ 最后更新 ] 01/10/2024 18:16
  4. [ 版权声明 ] 如果您在非 CSDN 网站内看到这一行,
  5. 说明网络爬虫可能在本人还没有完整发布的时候就抓走了我的文章,
  6. 可能导致内容不完整,请去上述的原文链接查看原文。

发表评论

表情:
评论列表 (有 0 条评论,145人围观)

还没有评论,来说两句吧...

相关阅读