如何解决在UNION中使用时使GCS查询失效保护
假设我有一些日志存储在按日期组织的文件夹中:
每行日志都有两个字段{"object": "...","user": "..."}
gs://my-bucket/my-logs/date=2020-11-01/abcd.json
gs://my-bucket/my-logs/date=2020-11-01/defg.json
gs://my-bucket/my-logs/date=2020-11-02/*.json
...
gs://my-bucket/my-logs/date=2020-11-08/*.json
我可以使用指向Cloud Storage的外部表来查询BigQuery中的日志。
CREATE EXTERNAL TABLE staging.my_logs
WITH PARTITION COLUMNS
OPTIONS (
uris=['gs://my-bucket/my-logs/*.json'],format='NEWLINE_DELIMITED_JSON',hive_partition_uri_prefix='gs://my-bucket/my-logs'
);
SELECT date,object,user
FROM staging.my_logs
WHERE date = CURRENT_DATE()
--returns lines of logs from today
SELECT date,user
FROM staging.my_logs
WHERE date = DATE_ADD(CURRENT_DATE(),INTERVAL 10 DAY)
--No result (the date is in the future and the GCS folder doesn't even exist)
但是,如果我与普通表合并,则会出现错误。
SELECT date,user
FROM staging.logs_history
UNION ALL
SELECT date,INTERVAL 10 DAY)
该查询指定了一个或多个联合数据源,但并未扫描全部。它通常表示不正确的uri规范,或者在不需要读取所有数据源的情况下满足的联合数据源联合中的“ limit”子句。
如何使此故障安全,而无需在GCS上创建一个空文件夹?
SELECT date,user
FROM staging.my_logs
WHERE date = CURRENT_DATE()
因为该文件夹存在,所以工作正常
SELECT date,user
FROM staging.my_logs
WHERE date = CURRENT_DATE()
UNION ALL
SELECT date,INTERVAL 10 DAY)
也很好。
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。