我使用包含url编码列的gzip压缩日志文件。 (空格字符编码为“%20”等)。
我的计划是将这些文件直接从Google Cloud Storage导入BigQuery。
我在Load config中找不到任何选项,可以在导入过程中自动解码值。
我猜你在我的所有查询中都不会建议使用一系列REGEXP_REPLACE。
任何想法都会避免解析所有日志并在将它们导入BigQuery之前转义所有这些字符(如果其中一个是分隔符会很危险)?
答案 0 :(得分:1)
很可能你最终得到的结果如下:o)
SELECT url FROM
js(
(SELECT url FROM
(SELECT 'http://example.com/query?q=my%20query%20string' AS url),
(SELECT 'http://example.com/query?q=your%20query%20string' AS url),
(SELECT 'http://example.com/query?q=his%20query%20string' AS url)
),
// Input columns.
url,
// Output schema.
"[
{name: 'url', type:'string'}]",
// The function.
"function(r, emit) {
var url = decodeURI(r.url);
emit({
url: url
});
}"
)
答案 1 :(得分:0)
对于旧版SQL,接受的答案。
对于标准SQL:
#standardSQL
CREATE TEMPORARY FUNCTION DECODE_URI_COMPONENT(path STRING)
RETURNS STRING
LANGUAGE js AS """
if (path == null) return null;
try {
return decodeURIComponent(path);
} catch (e) {
return path;
}
""";
WITH source AS (SELECT "/work.json?myfield=R%C3%A9gions%2CSport" AS path)
SELECT DECODE_URI_COMPONENT(REGEXP_EXTRACT(path, r"[?&]myfield=([^&]+)")) AS myfield FROM source
返回:
myfield
---------------
Régions,Sport