在 BigQuery 的查询中使用 UDF 作为列
Using UDF as a column in a query in BigQuery
我在 BigQuery 中创建了一个 UDF,并设法 运行 它就像文档 (https://cloud.google.com/bigquery/user-defined-functions#creating-the-query) 中的示例一样,其中 UDF 在 FROM 子句中使用。
但是,我需要的是使用select中的UDF作为列。
举个例子 - 这是我的函数,returns 每个坐标位于地球的哪个四分之一:
function getQuarter(row, emit) {
emit({quarter: getQuarterHelper(row.lon,row.lat)});
}
function getQuarterHelper(lon,lat) {
try {
var NS = lat > 0 ? 'N' : 'S';
var EW = lon > 0 ? 'E' : 'W';
return(NS + EW);
} catch (ex) {
return 'N/A';
}
}
bigquery.defineFunction(
'getQuarter',
['lon', 'lat'], //input columns
[{name: 'quarter', type: 'string'}], //output
getQuarter
);
这个有效:
SELECT quarter
FROM
getQuarter(
SELECT lon,lat
FROM [table_name]
)
但是,举个例子,这不是 :
SELECT location_title, getQuarter(lon, lat)
FROM [table_name]
这也不是:
SELECT *
FROM [table_name]
WHERE getQuarter(lon,lat) = 'NE'
您最好在较新的标准 SQL 中定义您的 UDF,而不是在有一些限制的旧版 SQL 中定义。
https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions
在标准中 SQL 你可以这样做:
SELECT location_title, getQuarter(lon, lat)
FROM `table_name`
在 Legacy SQL 中,您可以通过仅从 UDF 中公开 location_title 来欺骗。
也可以在标准 SQL 中
SELECT getQuarter(lon,lat) as q
FROM `table_name`
WHERE q = 'NE'
我在 BigQuery 中创建了一个 UDF,并设法 运行 它就像文档 (https://cloud.google.com/bigquery/user-defined-functions#creating-the-query) 中的示例一样,其中 UDF 在 FROM 子句中使用。
但是,我需要的是使用select中的UDF作为列。
举个例子 - 这是我的函数,returns 每个坐标位于地球的哪个四分之一:
function getQuarter(row, emit) {
emit({quarter: getQuarterHelper(row.lon,row.lat)});
}
function getQuarterHelper(lon,lat) {
try {
var NS = lat > 0 ? 'N' : 'S';
var EW = lon > 0 ? 'E' : 'W';
return(NS + EW);
} catch (ex) {
return 'N/A';
}
}
bigquery.defineFunction(
'getQuarter',
['lon', 'lat'], //input columns
[{name: 'quarter', type: 'string'}], //output
getQuarter
);
这个有效:
SELECT quarter
FROM
getQuarter(
SELECT lon,lat
FROM [table_name]
)
但是,举个例子,这不是 :
SELECT location_title, getQuarter(lon, lat)
FROM [table_name]
这也不是:
SELECT *
FROM [table_name]
WHERE getQuarter(lon,lat) = 'NE'
您最好在较新的标准 SQL 中定义您的 UDF,而不是在有一些限制的旧版 SQL 中定义。
https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions
在标准中 SQL 你可以这样做:
SELECT location_title, getQuarter(lon, lat)
FROM `table_name`
在 Legacy SQL 中,您可以通过仅从 UDF 中公开 location_title 来欺骗。
也可以在标准 SQL 中
SELECT getQuarter(lon,lat) as q
FROM `table_name`
WHERE q = 'NE'