我们正在使用BigQuery的新标准 " 标准 "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));
Run Code Online (Sandbox Code Playgroud)
Error: Only temporary functions are currently supported; use CREATE TEMPORARY FUNCTION
如果您尝试使用永久功能,它必须是Google返回的临时功能.
如果您尝试使用内联函数的查询保存视图 - 您会收到以下错误: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].
有关如何解决此问题的任何建议?我们有比所示示例更复杂的功能.
由于问题被标记为已解决,BigQuery 现在支持UDF 的永久注册。为了在视图中使用您的 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));
Run Code Online (Sandbox Code Playgroud)
TEMPORARY语句中没有,因为该函数将被全局注册和持久化。test在函数名称中同时包含项目名称和数据集名称 ( )。创建并成功运行后,您可以将其用作视图。
create view test.test_view as
select `ACCOUNT-NAME11111.test.STR_TO_TIMESTAMP`('2015-02-10T13:00:00Z') as ts
Run Code Online (Sandbox Code Playgroud)
然后,您可以直接查询您的视图,而无需在任何地方显式指定 UDF。
select * from test.test_view
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1080 次 |
| 最近记录: |