Hala Google Cloud Datalab için yeni ve parametreli sorgular yürütme bazı sorunlarınız var.Google Cloud Datalab iPython defterinde TABLE_QUERY parametresi için geçen parametreler
ben Datalab tutorial Sorgu parametrelerini geçirilmesi için örnek izledi ve aşağıdaki sorguyu uygulamak için çalıştı:
%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
Ben endeksler 0,1,2 ile tüm user_events tablolar üzerinde yineleme yapmak istiyorum 3 ... Bu amaçla, TABLE_QUERY parametresini geçmek ve bir tablonun tek bir yinelemesinde her tabloyu sorgulamak istiyorum - tüm tabloları aynı anda değil.
1. I vb yeni bir sorgu (%%sql --module topUserEvents
tanımlanan) (I, her tablo içinde kullanıcı kayıtlarını sipariş etmek gerekir çünkü kaynaklar tablolar aynı anda her user_events üzerinden bir sorgu yürütülürken aşıldığında)) ve değiştirilmesi Aşağıdaki
FROM (TABLE_QUERY([my_project:my_dataset:user_events],
'table_id CONTAINS "user_events_0"
AND RIGHT(table_id, 8) BETWEEN "20160401" AND "20160408"'))
ile: yukarıdaki sorgudan parçası
FROM (TABLE_QUERY([my_project:my_dataset:user_events],
'table_id CONTAINS "user_events_'+$tableNr+
'" AND RIGHT(table_id, 8) BETWEEN "20160401" AND "20160408"'))
bir dize olarak masa numarasını geçirerek, sorgu İdam - işe yaramadı:
invalidQuery: Expected a string literal for TABLE_QUERY clause
2.) Ben de orjinal sorgunun kısmını yerine, bütün dize geçirerek çalıştı:
invalidQuery: Error preparing subsidiary query:
com.google.cloud.helix.server.bqsql.common.BigQueryException:
Encountered " "CONTAINS" "CONTAINS "" at line 1, column 94.
Was expecting:
")" ...
: sorgusu, tüm dize geçirerek Gerçekleştirilen FROM (TABLE_QUERY([my_project:my_dataset:user_events], $tableString))
, Büyük Sorgu İstisna döndü
bilen var mı böyle bir durumda ab gibi TABLE_QUERY parametresi için bir dize (bir kısmını) geçmek nasıl ove?
Herhangi bir yardım büyük takdir :)
Çok teşekkürler!Ben de benzer bir çözüm denedim, ama çalışmadı çünkü geçen argümanın etrafındaki alıntıları kullandım; FROM (TABLE_QUERY ([my_project: my_dataset: user_events], 'table_id CONTAINS "$ events_table_num" VE DOĞRU (table_id, 8) "20160401" VE "20160408"') ARASINDAKİ BİRLİKTE Çünkü tekliflerin işe yaramaması gerekiyor. Tekrar teşekkürler :) – user2107356