2017-04-14 40 views
1
#standardSQL 
SELECT 
    blockchain.num_tx AS `num_tx`, 
    blockchain.timestamp AS `timestamp`, 
    GDELT.GLOBALEVENTID AS GLOBALEVENTID, 
    PARSE_TIMESTAMP('%Y%m%d', CAST(GDELT.SQLDATE AS STRING)) AS SQLDATE, 
    GDELT.Actor1Code AS Actor1Code, 
    GDELT.Actor1Name AS Actor1Name, 
    GDELT.Actor2Code AS Actor2Code, 
    GDELT.Actor2Name AS Actor2Name, 
    GDELT.AvgTone AS AvgTone, 
    GDELT.SOURCEURL AS SOURCEURL 
FROM 
    w205_final_project.blockchain_data AS blockchain 
INNER JOIN 
    w205_final_project.GDELT AS GDELT 
ON 
    blockchain.timestamp = GDELT.SQLDATE 

返回以下:正確的列名的選擇

Error: No matching signature for operator = for argument types: TIMESTAMP, INT64. Supported signature: ANY = ANY at [18:3]

GDELT.SQLDATE列數據是,首先,作爲YYYYMMDD整數格式; blockchain.timestamp列是timestamp格式開始,例如:

2015-01-01 04:29:21 UTC  
+0

什麼是SQLDate的類型?你想用它做什麼? –

+0

SQLDATE最初是一個整數。該線路正常工作; sqldate被轉換爲字符串,然後根據需要轉換爲時間戳。這是blockchain.timestamp行,給我帶來麻煩。我想結束這兩個時間戳格式化的列(名爲時間戳的列確實已經是時間戳格式)。 –

+0

顯示錯誤信息!並顯示'GDELT.SQLDATE'和'blockchain.timestamp'的幾個例子 - 下面的鏈接可以幫助你 - 如何顯示[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve)代碼,你有問題和[如何問](http://stackoverflow.com/help/how-to-ask)。 –

回答

2

我不是一個專家的BigQuery,但SQLDAT(_PARSED)只有經過此查詢的連接產生的場,你會找不到它在join條款SQLDATE(_PARSED)

你應該切換您GDELT.SQLDATEPARSE_TIMESTAMP('%Y%m%d', CAST(GDELT.SQLDATE AS STRING))

#standardSQL 
SELECT 
    blockchain.num_tx AS `num_tx`, 
    blockchain.timestamp AS `timestamp`, 
    GDELT.GLOBALEVENTID AS GLOBALEVENTID, 
    PARSE_TIMESTAMP('%Y%m%d', CAST(SQLDATE AS STRING)) AS SQLDATE, 
    GDELT.Actor1Code AS Actor1Code, 
    GDELT.Actor1Name AS Actor1Name, 
    GDELT.Actor2Code AS Actor2Code, 
    GDELT.Actor2Name AS Actor2Name, 
    GDELT.AvgTone AS AvgTone, 
    GDELT.SOURCEURL AS SOURCEURL 
FROM 
    final_project.blockchain_data AS blockchain 
INNER JOIN 
    final_project.GDELT AS GDELT 
ON 
    blockchain.timestamp = PARSE_TIMESTAMP('%Y%m%d', CAST(GDELT.SQLDATE AS STRING)) 

二點,別列命名timestamp,這是一個SQL關鍵字,它的保留,同去timedate,......至少,嘗試你的別名重命名爲類似blockchain.timestamp AS created`

並避免命名您的別名比你的列相同:

SELECT PARSE_TIMESTAMP('%Y%m%d', CAST(GDELT.SQLDATE AS STRING)) AS SQLDATE, 
FROM blockchain_data AS blockchain 
INNER JOIN GDELT 
    ON blockchain.timestamp = GDELT.SQLDATE; 

是不一樣的:

SELECT PARSE_TIMESTAMP('%Y%m%d', CAST(SQLDATE AS STRING)) AS SQLDATE_PARSED, 
FROM blockchain_data AS blockchain 
INNER JOIN GDELT 
    -- not what you want, but what you do, with error TIMESTAMP = INT64 
    ON blockchain.timestamp = SQLDATE 
    -- what you want, but show ERROR column not fould 
    ON blockchain.timestamp = SQLDATE_PARSED 
    -- Is the valid expression 
    ON blockchain.timestamp = PARSE_TIMESTAMP('%Y%m%d', CAST(SQLDATE AS STRING))