Mam zapytanie Postgres(redshift), które uruchamiam w Pythonie, które wyświetla pole i jego wartość. Chcę uruchomić inne zapytanie, które używa tej wartości z tego zapytania. Jednak gdy uruchamiam poniższy kod, pojawia się błąd:

taskinstance.py:1051} ERROR - no results to fetch

Oto mój kod:

def get_etl_recordd():
    pg_hook = PostgresHook(postgre_conn_id="postgres_default", schema='db1')
    connection = pg_hook.get_conn()
    nt_cur = connection.cursor(cursor_factory=psycopg2.extras.NamedTupleCursor)
    atest_update_query = "select max(updated_at) from schema1.table1 group by updated_at order by updated_at asc limit 1;"
    nt_cur.execute(atest_update_query)
    result = nt_cur.fetchone()
    max_updated_at = result.max

    cursor2= connection.cursor()
    latest_update_query1 = "select * from schema1.table1 where updated_at <= '{}'; commit;".format(max_updated_at)
    cursor2.execute(latest_update_query1)

    d=cursor2.fetchone()
    connection.close()

Jakiś pomysł, dlaczego tak się dzieje? Wartość z atest_updated_query jest znacznikiem czasu, a latest_updated_query1 faktycznie ma dane wyjściowe. Każda pomoc byłaby mile widziana.

To jest zapytanie Postgres(Redshift), które uruchamiam w Python/Airflow.

2
Coder123 19 grudzień 2019, 19:34
Usuń literówki (np. atest_updated_query, latest_upadted_query1, get_etl_recordd()`)
 – 
richyen
19 grudzień 2019, 20:40

1 odpowiedź

Nie mogę znaleźć problemu w Twoim kodzie, ale możesz spróbować użyć metody get_first metody PostgresHook. Ma robić dokładnie to, co próbujesz osiągnąć i na pewno działa w naszej konfiguracji przepływu powietrza / przesunięcia ku czerwieni.

sql = "SELECT 1"

hook = PostgresHook(postgres_conn_id=self.postgres_conn_id, schema=self.database)

first_col_of_first_row = self.hook.get_first(sql)[0]
1
botchniaque 20 grudzień 2019, 08:48
Czyli wiersze 2 i 3 powinny być zdefiniowane w ramach operatora niestandardowego? Jak to wdrożyłeś? A może po prostu uruchamiasz go w ramach zadania operatora Pythona?
 – 
cdabel
21 marzec 2020, 00:31
1
Jeśli to tylko myślenie, to nie zawracałbym sobie głowy zawijaniem go w operatora. Ale jeśli używasz go częściej, utwórz go.
 – 
botchniaque
23 marzec 2020, 14:08