2013-01-16 98 views
3

我使用包含url編碼列的gzip日誌文件。 (空格字符編碼爲「%20」等)。使用BigQuery中的網址編碼值

我的計劃是直接將這些文件從Google Cloud Storage導入到BigQuery中。

我在Load config中找不到任何選項來在導入過程中自動解碼值。

我想你不會在我的所有疑問中使用一系列REGEXP_REPLACE

任何想法都會避免解析所有日誌並在將它們導入BigQuery之前轉義所有這些字符(如果它們中的一個是分隔符會很危險)?

+1

根據http://stackoverflow.com/questions/13831391/bigquery-url-decode,這是現在不可用BigQuery的。 – greeness

+0

按照BigQuery開發人員的要求,我們啓動了一個公共問題跟蹤器來收集功能請求,並允許一個地方報告錯誤。我們將此請求作爲我們的第一項功能請求:http://code.google.com/p/google-bigquery/issues/detail?id = 1「Star」問題以投票支持。 –

回答

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

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