具有正则表达式和日期范围的 BigQuery 通配符表
BigQuery Wildcard tables with Regex and date range
是否可以合并 table wildcard functions as documented here?
我浏览了 Table Query functions SO answer,但似乎没有完全涵盖我的用例。
我有 table 格式的名称:s_CUSTOMER_ID_YYYYMMDD
我可以使用以下方法找到客户 ID 的所有 table:
SELECT *
FROM TABLE_QUERY([project:dataset],
'REGEXP_MATCH(table_id, r"^s_CUSTOMER_ID")')
我可以通过以下方式找到日期范围内的所有 table:
SELECT *
FROM (TABLE_DATE_RANGE([project:dataset],
TIMESTAMP('2016-01-01'),
TIMESTAMP('2016-03-01')))
但是如何同时查询两者?
我试过使用这样的子查询:
SELECT * FROM
(SELECT *
FROM TABLE_QUERY([project:dataset],
'REGEXP_MATCH(table_id, r"^s_CUSTOMER_ID")'))
,(SELECT *
FROM (TABLE_DATE_RANGE([project:dataset],
TIMESTAMP('2016-01-01'),
TIMESTAMP('2016-03-01'))))
...但是解析器抱怨 Error: Can't parse table: project:dataset
。
添加一个点使它们成为 project:dataset.
会导致错误 Error: Error preparing subsidiary query: Dataset project:dataset. not found
我的 table 名字做得不好吗?如果是这样,组织它们的更好方法是什么?
下面的快速 "solution" - 应该可以工作,您可以根据 real/extra 您可能
的要求进行改进
SELECT *
FROM
TABLE_QUERY([project:dataset],
'REGEXP_MATCH(table_id, r"^s_CUSTOMER_ID")
AND RIGHT(table_id, 8) BETWEEN "20160101" AND "20160301"')
是否可以合并 table wildcard functions as documented here?
我浏览了 Table Query functions SO answer,但似乎没有完全涵盖我的用例。
我有 table 格式的名称:s_CUSTOMER_ID_YYYYMMDD
我可以使用以下方法找到客户 ID 的所有 table:
SELECT *
FROM TABLE_QUERY([project:dataset],
'REGEXP_MATCH(table_id, r"^s_CUSTOMER_ID")')
我可以通过以下方式找到日期范围内的所有 table:
SELECT *
FROM (TABLE_DATE_RANGE([project:dataset],
TIMESTAMP('2016-01-01'),
TIMESTAMP('2016-03-01')))
但是如何同时查询两者?
我试过使用这样的子查询:
SELECT * FROM
(SELECT *
FROM TABLE_QUERY([project:dataset],
'REGEXP_MATCH(table_id, r"^s_CUSTOMER_ID")'))
,(SELECT *
FROM (TABLE_DATE_RANGE([project:dataset],
TIMESTAMP('2016-01-01'),
TIMESTAMP('2016-03-01'))))
...但是解析器抱怨 Error: Can't parse table: project:dataset
。
添加一个点使它们成为 project:dataset.
会导致错误 Error: Error preparing subsidiary query: Dataset project:dataset. not found
我的 table 名字做得不好吗?如果是这样,组织它们的更好方法是什么?
下面的快速 "solution" - 应该可以工作,您可以根据 real/extra 您可能
的要求进行改进SELECT *
FROM
TABLE_QUERY([project:dataset],
'REGEXP_MATCH(table_id, r"^s_CUSTOMER_ID")
AND RIGHT(table_id, 8) BETWEEN "20160101" AND "20160301"')