Ich bin noch ziemlich neu im Google Cloud Datalab und habe einige Probleme beim Ausführen parametrisierter Abfragen.Parameter für TABLE_QUERY in Google Cloud Datalab übergeben iPython-Notizbuch
ich das Beispiel für das Bestehen Abfrageparameter von Datalab tutorial gefolgt und versuchte es auf der folgenden Abfrage anwenden:
%sql
SELECT user_id, localTime, event
FROM (SELECT user_id, DATE_ADD(date, timezoneOffset, "SECOND") AS localTime, event
FROM (TABLE_QUERY([my_project:my_dataset:user_events],
'table_id CONTAINS "user_events_0"
AND RIGHT(table_id, 8) BETWEEN "20160401" AND "20160408"'))
WHERE
user_id IS NOT NULL AND
timezoneOffset IS NOT NULL AND
event IS NOT NULL)
WHERE
user_id IN (SELECT id FROM [my_project:my_dataset.topUsers])
ORDER BY user_id, localTime
ich alle user_events Tabellen iterieren möchten, mit Indizes 0,1,2, 3 ... Zu diesem Zweck möchte ich den Parameter für die TABLE_QUERY übergeben und jede Tabelle in einer Iteration einer Schleife abfragen - nicht alle Tabellen gleichzeitig. (Weil ich brauche Benutzer Datensätze in jeder Tabelle, um zu bestellen, die Ressourcen überschritten werden, wenn eine Abfrage über alle user_events Tabellen auf einmal ausgeführt wird)
1.) ich eine neue Abfrage definiert (%%sql --module topUserEvents
etc.) und ersetzt die folgenden Teil aus der Abfrage oben:
FROM (TABLE_QUERY([my_project:my_dataset:user_events],
'table_id CONTAINS "user_events_0"
AND RIGHT(table_id, 8) BETWEEN "20160401" AND "20160408"'))
mit:
FROM (TABLE_QUERY([my_project:my_dataset:user_events],
'table_id CONTAINS "user_events_'+$tableNr+
'" AND RIGHT(table_id, 8) BETWEEN "20160401" AND "20160408"'))
die Abfrage ausgeführt, Tabellennummer als String übergeben - hat nicht funktioniert:
invalidQuery: Expected a string literal for TABLE_QUERY clause
2.) Ich habe auch versucht die ganze String übergeben, ein Teil der ursprünglichen Abfrage mit dem Ersetzen:
FROM (TABLE_QUERY([my_project:my_dataset:user_events], $tableString))
die Abfrage ausgeführt, die gesamte Zeichenfolge vorbei, kehrte Big Abfrage Ausnahme:
invalidQuery: Error preparing subsidiary query:
com.google.cloud.helix.server.bqsql.common.BigQueryException:
Encountered " "CONTAINS" "CONTAINS "" at line 1, column 94.
Was expecting:
")" ...
Kennt jemand wie (einen Teil), wie in dem Fall eine Zeichenfolge für TABLE_QUERY Parameter ab passieren Ove?
Jede Hilfe würde sehr geschätzt werden :)
Vielen Dank!Ich versuchte auch eine ähnliche Lösung, aber funktionierte nicht, weil ich die Anführungszeichen um das übergebene Argument verwendete; 'FROM (TABLE_QUERY ([my_project: my_dataset: user_events], 'table_id CONTAINS" $ events_table_num " UND RECHTS (table_id, 8) ZWISCHEN" 20160401 "UND" 20160408 "'))' Das ergab für mich, aber für einige Deshalb müssen die Anführungszeichen weggelassen werden, um zu arbeiten. Danke nochmal :) – user2107356