2016-12-30 3 views
0

Ich verwende derzeit die Stream-Option von BigQuery, um Daten in Tabellen zu laden. Tabellen, die eine Partition auf dem Datum haben, zeigen jedoch keine Partitionen an ... Ich bin mir bewusst, dass dies ein Effekt des Streaming ist.BigQuery-Job einfügen statt streamen

Die Python-Code verwende ich:

def stream_data(dataset_name, table_name, data): 
    bigquery_client = bigquery.Client() 
    dataset = bigquery_client.dataset(dataset_name) 
    table = dataset.table(table_name) 

    # Reload the table to get the schema. 
    table.reload() 
    rows = data 
    errors = table.insert_data(rows) 
    if not errors: 
     print('Loaded 1 row into {}:{}'.format(dataset_name, table_name)) 
    else: 
     print('Errors:') 
     print(errors) 

Will Datum partitionierten Tabellen zeigen schließlich, und wenn nein, wie kann ich einen Einsatz Auftrag erstellen, dies zu realisieren?

+0

_ "Tabellen, auf denen die Datumspartition angezeigt wird, zeigen keine Partitionen" _ - Können Sie etwas näher darauf eingehen? Wir streamen bis heute partitionierte Tabellen ohne Probleme. –

+0

Im Web-UI kann ich nur eine Tabelle sehen. In einem anderen Dataset (das ich nicht erstellt habe) kann ich eine Tabelle sehen, aber die Anzahl der Partitionen in Klammern hinter dem Tabellennamen, und dann kann ich die Tabelle mit 'tablenameYYYYMMDD' abfragen. Ich möchte das erreichen. – user3289867

+0

Zusatz: auch in der Lage zu sein, TABLE_DATE_RANGE zu verwenden – user3289867

Antwort

2

Nicht sicher, was Sie unter "Partitionen werden nicht angezeigt" verstehen, aber wenn Sie eine partitionierte Tabelle erstellen, sehen Sie nur eine einzige Tabelle.

Der einzige Unterschied ist, dass Sie in dieser Tabelle für Datum Partitionen abfragen können, etwa so:

SELECT 
    * 
FROM 
    mydataset.partitioned_table 
WHERE 
    _PARTITIONTIME BETWEEN TIMESTAMP('2016-12-25') 
    AND TIMESTAMP('2016-12-31'); 

Wie Sie in diesem Beispiel partitionierten Tabellen haben die Meta-Spalte _PARTITIONTIME und das ist zu sehen, was Sie verwenden Wählen Sie die Partitionen, an denen Sie interessiert sind.

Für weitere Informationen, hier sind die docs erklären ein bisschen mehr über die Abfrage von Daten in partitionierten Tabellen.

+0

Danke für die Antwort. Was ich erreichen möchte ist, dass ich Tabellen auf diese Weise abfragen kann: SELECT * FROM tableYYYYMMDD um Abfragen zu vereinfachen. Wie kann ich das erreichen? – user3289867

+0

Zusatz: auch TABLE_DATE_RANGE verwenden – user3289867

+2

ich glaube nicht, dass es möglich ist, das mit partitionierten Tabellen zu tun. Um 'TABLE_DATE_RANGE' und' tableYYYYMMDD' zu verwenden, müssten Sie möglicherweise für jeden Tag eigene Tabellen erstellen. Sie können jedoch weiterhin partitionierte Tabellen verwenden, um die gleiche Aufgabe auszuführen. Der einzige Unterschied besteht darin, dass Sie wie folgt auswählen: 'Wählen Sie * aus der Tabelle _partitiontime = timestamp (date)' und 'select * aus der Tabelle where _partitiontime zwischen date1 und date2 entspricht der Operation "table_date_range". –