Я пытаюсь получить количество строк и столбцов всех таблиц в схеме на сервере sql, используя spark sql.
когда я выполняю запрос ниже с помощью sqoop, он дает мне правильные результаты.
sqoop eval --connect "jdbc:sqlserver://<hostname>;database=<dbname>" \
--username=<username> --password=<pwd> \
--query """SELECT
ta.name TableName ,
pa.rows RowCnt,
COUNT(ins.COLUMN_NAME) ColCnt FROM <db>.sys.tables ta INNER JOIN
<db>.sys.partitions pa ON pa.OBJECT_ID = ta.OBJECT_ID INNER JOIN
<db>.sys.schemas sc ON ta.schema_id = sc.schema_id join
<db>.INFORMATION_SCHEMA.COLUMNS ins on ins.TABLE_SCHEMA =sc.name and ins.TABLE_NAME=ta.name
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0) and sc.name ='<schema>' GROUP BY sc.name, ta.name, pa.rows order by
TableName"""
Но когда я пытаюсь выполнить тот же запрос из spark sql, я получаю сообщение об ошибке " com.microsoft.sqlserver.jdbc.SQLServerException: неверный синтаксис рядом с ключевым словом" WHERE " "Пожалуйста, помогите мне, если у кого-то есть представление об этой ошибке.
Ниже приведена команда spark sql, которую я выполнил spark-shell --jars" /var/lib/sqoop/sqljdbc42.jar"
sqlContext.read.format("jdbc").option("url", "jdbc:sqlserver://<hostname>;database=<dbname>;user=<user>;password=<pwd>").option("dbtable", """(SELECT
ta.name TableName ,pa.rows RowCnt,
COUNT(ins.COLUMN_NAME) ColCnt FROM <db>.sys.tables ta INNER JOIN
<db>.sys.partitions pa ON pa.OBJECT_ID = ta.OBJECT_ID INNER JOIN
<db>.sys.schemas sc ON ta.schema_id = sc.schema_id join
<db>.INFORMATION_SCHEMA.COLUMNS ins on ins.TABLE_SCHEMA =sc.name and ins.TABLE_NAME=ta.name
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0) and sc.name ='<schema>' GROUP BY sc.name,ta.name, pa.rows)""").option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver").load()
ожидаемый результат:
TableName, RowCnt, ColCnt
таблица A, 62, 30
таблица B, 384676