Чтение из базы данных, а не из таблицы, используя SQL - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь прочитать данные из созданного мною представления на основе других представлений в моей базе данных, используя Python.

Настройка базы данных:

Redshift-postgres
  dev
    Schemas
      schema_name
        Tables
          table_name
        Views
          view_name

Python code:

connection=psycopg2.connect("dbname=dev host=redshift.amazonaws.com port=5439 user=user password=password")

cursor = connection.cursor()
schema = "SELECT count(*) FROM schema_name.table_name;"
schema2 = "SELECT count(*) FROM schema_name.view_name;"
result = pd.read_sql(schema, connection)

Когда я запускаю код с schema, он возвращает данные из таблицы, но когда я пытаюсь запустить schema2, он ничего не возвращает, и сообщение об ошибке не отображается. Сценарий не останавливает его, просто бездействует.

Я что-то не так делаю, когда пытаюсь получить данные из представления, а не из таблицы?

ОБНОВЛЕНИЕ

Когда я запускаю schema2 = "SELECT * FROM INFORMATION_SCHEMA.TABLES;", он возвращает следующее:

table_catalog    table_schema   table_name  table_type 
dev              schema_name    view_name         VIEW    

В нем перечисляется представление, из которого я пытаюсь прочитать данные.

Я создал представление следующим образом:

CREATE OR REPLACE VIEW schema_name.view_name
AS SELECT *
        CASE
            WHEN statement
            ELSE false
        END AS column_name, 

   FROM schema_name.another_view_name
   LEFT JOIN schema_name.another_view_name_2 data_1 ON data_2 = data_3
   LEFT JOIN schema_name.another_view_name_3 data_4 ON data_5 = data_6

Я назвал релевантные данные data_x, где я объединяю представления, основываясь на некоторых условиях.

1 Ответ

0 голосов
/ 21 февраля 2020

Оказалось, что амазонское красное смещение БД было забито и имело 5 запросов, которые выполнялись в течение 4 дней без ответа. Во всяком случае, я все еще нахожу, что чтение из представления с двумя левыми объединениями занимает около 3 часов, что не должно работать. Вид имеет только 1,2 м строк. Спасибо за ваши предложения.

...