google-bigquery - 自定义函数中复杂逻辑的 BigQuery 成本
问题描述
我在这样定义的自定义函数中使用了相对昂贵的计算:
CREATE TEMP FUNCTION HMAC256(message STRING, secret STRING)
RETURNS STRING
LANGUAGE js
OPTIONS (
-- copy this Forge library file to Storage:
-- https://cdn.jsdelivr.net/npm/node-forge@0.7.0/dist/forge.min.js
-- @see https://github.com/digitalbazaar/forge
library=["gs://.../forge.min.js"]
)
AS
"""
var hmac = forge.hmac.create();
hmac.start('sha256', secret);
hmac.update(message);
return hmac.digest().toHex();
""";
SELECT HMAC256("test", "111");
-- Row f0_
-- 1 f8320c4eded4b06e99c1a884a25c80b2c88860e13b64df1eb6f0d3191023482b
LOWER
例如,与应用功能相比,这会更昂贵吗?
HMAC256
在我的数据集上花费 4 分钟,而在LOWER
.
如果价格相同,那就太棒了。我有一种感觉,我错过了什么。
解决方案
是的。费用将是相同的。对于 BigQuery,您的查询可能会变得更复杂和更昂贵,但您只需按相同的费率收取费用,直到您的查询达到限制。如果您没有预订(又名统一费率插槽),您的禁区查询将失败。
第 100 层下的所有高计算查询均按第 1 层计费。
除非查询在保留实例中运行,否则 100 层以上的所有查询都将失败并出现 RESOURCES_EXCEEDED_PER_BYTE 错误。
推荐阅读
- mysql - 书架关联错误
- python - 将 pandas 数据框中的列相加会导致分类索引错误
- hadoop - 如何在没有 CDH 的情况下安装和配置 Hue 来管理 HDFS
- vue.js - vue 将数据挂载到多个 div 或 table
- ruby - double splat 在方法调用中的作用是什么?
- python - Selenium:当我打印()时单击()不起作用,当我注释掉打印()时调用错误
- angular - Angular 2 应用程序可在工作计算机上运行,而家用计算机则无法正常运行
- python-3.x - 发送消息并嵌入 1 个命令 (Discord.py)
- object - TensorFlow 对象检测 API 最低分数阈值
- python - 如何将字符串数据保存到 TFRecord?