我们正在使用BigQuery的新方言“standard”SQL。 新的SQL支持用SQL而不是JS编写的内联函数,因此我们创建了一个处理日期转换的函数。
CREATE TEMPORARY FUNCTION
STR_TO_TIMESTAMP(str STRING)
RETURNS TIMESTAMP AS (PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*SZ', str));
如果您尝试使用永久功能,Google必须是临时功能,因为Google会返回Error: Only temporary functions are currently supported; use CREATE TEMPORARY FUNCTION
。
如果您尝试使用内联函数的查询保存视图,则会收到以下错误:Failed to save view. No support for CREATE TEMPORARY FUNCTION statements inside views
。
如果您试图超越它,并删除该功能(希望在查询时间内添加它),您将收到此错误Failed to save view. Function not found: STR_TO_TIMESTAMP at [4:7]
。
有关如何解决此问题的任何建议?我们有比所示示例更复杂的功能。
答案 0 :(得分:1)
根据文档https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_function_statement,该功能仍处于Beta阶段,但可行。可以在与创建函数相同的数据集中查看函数,也可以创建视图。 请分享一下,如果这对您而言效果很好,或者您有任何对他人有用的发现。
答案 1 :(得分:1)
仍然不支持保存使用temp函数创建的视图,但是您可以做的是计划SQL查询(已针对最新的UI推出),然后将其保存为表。这对我有用,但是我想这取决于您想要的查询参数。
##standardSQL
## JS in SQL to extract multiple h.CDs at the same time.
CREATE TEMPORARY FUNCTION getCustomDimension(cd ARRAY<STRUCT< index INT64,
value STRING>>, index INT64)
RETURNS STRING
LANGUAGE js AS """
for(var i = 0; i < cd.length; i++) {
var item = cd[i];
if(item.index == index) {
return item.value
}
}
return '';
""";
SELECT DISTINCT h.page.pagePath, getcustomDimension(h.customDimensions,20), fullVisitorId,h.page.pagePathLevel1, h.page.pagePathLevel2, h.page.pagePathLevel3, getcustomDimension(h.customDimensions,3)
FROM
`XXX.ga_sessions_*`,
UNNEST(hits) AS h
WHERE
### rolling timeframe
_TABLE_SUFFIX = FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(),INTERVAL YY DAY))
AND h.type='PAGE'
答案 2 :(得分:1)
由于该问题被标记为resolved,因此BigQuery现在支持permanents registration of UDFs。 为了在视图中使用UDF,您需要先创建它。
CREATE OR REPLACE FUNCTION `ACCOUNT-NAME11111.test.STR_TO_TIMESTAMP`
(str STRING)
RETURNS TIMESTAMP AS (PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*SZ', str));
TEMPORARY
,因为该函数将被全局注册并保留。test
)。一旦创建并成功运行它,就可以使用它作为视图。
create view test.test_view as
select `ACCOUNT-NAME11111.test.STR_TO_TIMESTAMP`('2015-02-10T13:00:00Z') as ts
然后您可以直接查询您的视图,而无需在任何地方显式指定UDF。
select * from test.test_view