Конвертировать запрос SQL Server для получения информации о схеме в BigQuery - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь использовать инструмент ERD Import от Lucidchart с BigQuery, для которого не написан стандартный запрос (но есть запросы для Oracle, SQL-сервера, MySQL и PostgreSQL).

Поддержка Lucidchart говорит, что я должен попробовать запрос к SQL-серверу, который является

SELECT
  'sqlserver' dbms,
  t.TABLE_CATALOG,
  t.TABLE_SCHEMA,
  t.TABLE_NAME,
  c.COLUMN_NAME,
  c.ORDINAL_POSITION,
  c.DATA_TYPE,
  c.CHARACTER_MAXIMUM_LENGTH,
  n.CONSTRAINT_TYPE,
  k2.TABLE_SCHEMA,
  k2.TABLE_NAME,
  k2.COLUMN_NAME
FROM
  INFORMATION_SCHEMA.TABLES t
LEFT JOIN
  INFORMATION_SCHEMA.COLUMNS c
ON
  t.TABLE_CATALOG=c.TABLE_CATALOG
  AND t.TABLE_SCHEMA=c.TABLE_SCHEMA
  AND t.TABLE_NAME=c.TABLE_NAME
LEFT JOIN (INFORMATION_SCHEMA.KEY_COLUMN_USAGE k
  JOIN
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS n
  ON
    k.CONSTRAINT_CATALOG=n.CONSTRAINT_CATALOG
    AND k.CONSTRAINT_SCHEMA=n.CONSTRAINT_SCHEMA
    AND k.CONSTRAINT_NAME=n.CONSTRAINT_NAME
  LEFT JOIN
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS r
  ON
    k.CONSTRAINT_CATALOG=r.CONSTRAINT_CATALOG
    AND k.CONSTRAINT_SCHEMA=r.CONSTRAINT_SCHEMA
    AND k.CONSTRAINT_NAME=r.CONSTRAINT_NAME)
ON
  c.TABLE_CATALOG=k.TABLE_CATALOG
  AND c.TABLE_SCHEMA=k.TABLE_SCHEMA
  AND c.TABLE_NAME=k.TABLE_NAME
  AND c.COLUMN_NAME=k.COLUMN_NAME
LEFT JOIN
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE k2
ON
  k.ORDINAL_POSITION=k2.ORDINAL_POSITION
  AND r.UNIQUE_CONSTRAINT_CATALOG=k2.CONSTRAINT_CATALOG
  AND r.UNIQUE_CONSTRAINT_SCHEMA=k2.CONSTRAINT_SCHEMA
  AND r.UNIQUE_CONSTRAINT_NAME=k2.CONSTRAINT_NAME
WHERE
  t.TABLE_TYPE='BASE TABLE';

. Я исправил первую проблему, которая заключалась в необходимости имени набора данных bigquery перед таблицами, т.е. `dataset`.INFORMATION_SCHEMA.ТАБЛИЦЫ;однако `dataset`.INFORMATION_SCHEMA.TABLE_CONSTRAINTS, по-видимому, не существует.

Есть ли альтернатива для выбора этой информации в операторе SELECT?

Обновление:

Вот несколько строк примера вывода (заголовки скоро будут):

postgresql,quizbowl,public,database_migrations,applied,2,timestamp with time zone,,,,,
postgresql,quizbowl,public,database_migrations,name,1,character varying,,,,,
postgresql,quizbowl,public,load_data_versions,applied,3,timestamp with time zone,,,,,
postgresql,quizbowl,public,load_data_versions,checksum,2,character varying,,,,,
postgresql,quizbowl,public,load_data_versions,name,1,character varying,,,,,
postgresql,quizbowl,public,event_team,create_date,4,timestamp with time zone,,,,,
postgresql,quizbowl,public,event_team,create_user_id,3,integer,,FOREIGN KEY,public,user_account,user_id
...