BigQuery JavaScript UDF:V8 实例的区域
Posted
技术标签:
【中文标题】BigQuery JavaScript UDF:V8 实例的区域【英文标题】:BigQuery JavaScript UDFs: Region of V8 instances 【发布时间】:2018-10-10 08:01:30 【问题描述】:在 BigQuery 中,您可以添加将在 V8 实例上执行的 javascript UDF。 This page on googleblog.com(几乎是我能找到的关于该主题的唯一一页)声明
JavaScript UDF 在 Google 服务器上运行的 Google V8 实例上执行。您的代码在您的数据附近运行,以最大限度地减少额外的延迟。
因此,例如,当我在欧洲有数据时,我希望 UDF 将在同一区域执行。但是,当我运行以下查询时,该实例似乎不像我预期的那样接近我的数据:
CREATE TEMP FUNCTION getDate()
RETURNS String
LANGUAGE js AS """
return new Date();
""";
SELECT CURRENT_DATETIME() dateTimeBigQuery
, getDate() as dateTimeJavaScript
此语句的输出:
dateTimeBigQuery dateTimeJavaScript
2018-10-10T07:42:32.556699 Wed Oct 10 2018 00:42:32 GMT-0700 (PDT)
This page on Time functions in BigQuery 告诉我 CURRENT_DATETIME() 函数在没有指定时区时返回 UTC 日期时间。
This page on Date functions in JavaScript 状态
如果没有提供参数,则构造函数会根据系统设置为当前日期和时间创建一个 JavaScript Date 对象,用于时区偏移。
当我使用 BigQuery 表中的数据(没有时区的日期时间)并将其传递给 JavaScript 函数时,它还将返回 GMT-0700 的日期时间
所以我可以安全地假设 V8 的实例没有靠近我的数据运行吗? 如果是这样的话,有没有办法为那个实例指定一个区域?
【问题讨论】:
【参考方案1】:BigQuery 会覆盖 Date
的构造函数以使用 UTC,而不是从执行 UDF 的任何位置获取时区,以便与 CURRENT_DATE
、CURRENT_DATETIME
等函数保持一致。实际的 V8 环境始终与执行查询中其他逻辑的作业一起运行。
【讨论】:
所以如果我理解正确的话; JavaScript 函数的输出不是它在此处运行的实例的实际时区? 没错,不管代码在哪里执行都会被覆盖使用UTC。以上是关于BigQuery JavaScript UDF:V8 实例的区域的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery JavaScript UDF:V8 实例的区域
用于合并值列表/数组的 BigQuery JavaScript UDF
描述如何在 SQL 中内联定义 Javascript UDF 函数的 BigQuery 文档在哪里(不是在 UDF 编辑器或单独的文件中)?
使用 JavaScript BigQuery UDF 解密/解码 AES256 [重复]