在BigQuery中使用url编码的值

时间:2013-01-16 21:30:10

标签: google-bigquery

我使用包含url编码列的gzip压缩日志文件。 (空格字符编码为“%20”等)。

我的计划是将这些文件直接从Google Cloud Storage导入BigQuery。

我在Load config中找不到任何选项,可以在导入过程中自动解码值。

我猜你在我的所有查询中都不会建议使用一系列REGEXP_REPLACE

任何想法都会避免解析所有日志并在将它们导入BigQuery之前转义所有这些字符(如果其中一个是分隔符会很危险)?

2 个答案:

答案 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
    });
  }"
)

https://cloud.google.com/bigquery/user-defined-functions

答案 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