2017-06-08 3 views
0

Ich erhalte einen Fehler bei der Verwendung einer Datumsspalte in der BigQuery-Webbenutzeroberfläche mit einer Abfrage in Standard-SQL, wenn Tabellenplatzhalter verwendet werden.BigQuery Standard-SQL-Tabellen-Platzhalter mit Datumsspalten

Dies funktioniert:

#standardSQL 
SELECT 
    sale_item, 
    date_of_sale 
FROM `my-project.past_sales.sales_20170601` 
limit 100 

Dies gilt nicht:

#standardSQL 
SELECT 
    sale_item, 
    date_of_sale 
FROM `my-project.past_sales.sales_*` 
WHERE _TABLE_SUFFIX BETWEEN "20170530" AND "20170601" 
limit 100 

Die Säule date_of_sale ist DATE geben, während sale_itemSTRING ist der Typ. Der Fehler lautet: Error: Invalid adaptation for field: date_of_sale (message Msg_0_CLOUD_QUERY_TABLE). Cannot change from TYPE_STRING to int32

Antwort

1

Dies bedeutet, dass date_of_sale eine DATE in einer Tabelle und eine STRING in einer anderen ist. Sie können den Übeltäter finden, indem Sie stattdessen eine Union verwenden:

#standardSQL 
SELECT * FROM `my-project.past_sales.sales_20170530` UNION ALL 
SELECT * FROM `my-project.past_sales.sales_20170531` UNION ALL 
SELECT * FROM `my-project.past_sales.sales_20170601`; 

Sie müssen die Abfrage tatsächlich nicht ausführen; Der Validierer in der Benutzeroberfläche gibt an, wo der nicht übereinstimmende Spaltentyp ist.

Um den Fehler zu beheben, können Sie entweder die Daten für den problematischen Tag neu generieren, eine Umwandlung anwenden oder stattdessen eine Abfrage mit einer Union ausführen, in der Sie eine explizite Umwandlung hinzufügen. Angenommen, dass die Tabelle für 20170531 die Spalte als STRING enthält, könnten Sie Folgendes tun:

#standardSQL 
SELECT 
    sale_item, 
    date_of_sale 
FROM (
    SELECT * 
    FROM `my-project.past_sales.sales_*` 
    WHERE _TABLE_SUFFIX BETWEEN "20170530" AND "20170601" AND 
    _TABLE_SUFFIX != 20170531 
) UNION ALL 
SELECT * REPLACE(CAST(date_of_sale AS DATE) AS date_of_sale) 
FROM `my-project.past_sales.sales_20170531` 
LIMIT 100; 
Verwandte Themen