【发布时间】:2016-10-28 03:30:08
【问题描述】:
这里我有一个 scala UDF,它检查一个 url 是否是我的域之一。要检查“to_site”是否是我的域之一,我在 javascript 中使用indexOf。
CREATE TEMPORARY FUNCTION our_domain(to_site STRING)
RETURNS BOOLEAN
LANGUAGE js AS """
domains = ['abc.com', 'xyz.com'];
if (to_site == null || to_site == undefined) return false;
for (var i = 0; i < domains.length; i++){
var q= DOMAIN('XYZ');
if (String.prototype.toLowerCase.call(to_site).indexOf(domains[i]) !== -1)
return true;
}
return false;
""";
SELECT our_domain('www.foobar.com'), our_domain('www.xyz.com');
这会返回 false,然后返回 true。
如果我可以使用 javascript 中的 DOMAIN(url) 函数会更好。 indexOf 不是很好,因为它会匹配 www.example.com?from=www.abc.com,而实际上 example.com 不是我的域之一。 Javascript 也有一个 (new URL('www.example.com/q/z')).hostname 来解析域组件,但它包括像“www”这样的子域。这使比较复杂化。 Bigquery 的 DOMAIN(url) 函数只提供域并且知道谷歌它是快速的 C++。
我知道我能做到
our_domain(DOMAIN('www.xyz.com'))
但总的来说,最好在 javascript 中使用一些 bigquery API 函数。这可能吗?
我也试过了
CREATE TEMPORARY FUNCTION our_domain1(to_site String)
AS (our_domain(DOMAIN(to_site));
但它没有说 DOMAIN 不存在。
【问题讨论】:
标签: google-bigquery google-cloud-platform