У меня есть запрос, который работает в Athena, но не работает в Spark SQL.
Запрос-
With cte as ( select year(date) as year, count(*) as total, count(col1) as col1_not_null,count(col2) as col2_not_null from table group by year(date))
Select cte.year,t.total,t.not_null,t.colum_name,t.not_null from cte
Cross join
UNNEST (array[
cast(row('col1',cte.total,cte.co1_notnull)as row(column_name varchar,total bigint,not_null bigint)),
cast(row('col2',cte.total,cte.col2_notnull)as row(column_name varchar,total bigint,not_null bigint))])a(t)
])
Пожалуйста, помогите мне создать искровой SQL-запрос для запуска в искре.
Ожидаемый результат:
Пример данных взят из таблицы и ничего больше. Мне нужен точно такой же рабочий запрос в Spark sql. Это может быть с изменением имени функции или использованием других функций.
«Образец данных взят из таблицы и ничего больше» — у нас нет доступа к вашей таблице.
«Мне нужен точно такой же рабочий запрос в Spark sql» - вы до сих пор не предоставили подробную информацию, что именно у вас не работает.
Упомянутый выше запрос работает в athena. Но когда я выполнил тот же запрос в spark.sql(). Я провалил. у меня есть таблица с 2 миллионами записей. Необходимо вычислить отсутствующие и неотсутствующие данные для каждого столбца, длина которого превышает 150 столбцов. с той же логикой, используя другую функцию, можно достичь. я работаю над этим
Проверьте запрос ниже, преобразованный в Spark
WITH cte AS (
SELECT
YEAR(date) AS year,
COUNT(*) AS total,
COUNT(col1) AS col1_not_null,
COUNT(col2) AS col2_not_null,
FROM table
GROUP BY YEAR(date)
),
unnest_cte AS (
SELECT
INLINE(
array(
struct(
'col1' as column_name,
cte.total,
cte.col1_not_null AS not_null
),
struct(
'col2' as column_name,
cte.total,
cte.col2_not_null AS not_null
)
)
) FROM cte
)
SELECT
year,
cte.total,
not_null,
column_name,
not_null
FROM cte
CROSS JOIN unnest_cte
Спасибо за ваш ответ. Но ожидаемый результат совсем иной. Несмотря на то, что мы упомянули перекрестное соединение в запросе Athena. Это дает счет 2 строки выше ожидаемого результата. но когда я выполнил приведенный выше запрос, он умножил записи и дал четыре строки в приведенном выше случае.
Когда мы выполняем вычисления массивов в перекрестном соединении с использованием столбцов из cte вместо unnest cte, оно не умножается. но когда мы используем unnest _cte и выполняем перекрестное соединение, оно умножается.
Я дал идею о том, как преобразовать в искру. В остальном вы можете отладить больше и опубликовать это как новый вопрос.
Я могу выполнить запрос, используя боковой вид Inline...
1) «У меня есть запрос, который работает в Athena, но не работает в Spark SQL». - а почему это должно быть? Athena основана на Presto/Trino, у которого другой диалект SQL. 2) "не работает" - "не работает" не очень полезно, как именно это не работает? Ошибка синтаксиса? Неправильные результаты? 3) Вы показали ожидаемый результат, но каковы примерные данные, которые следует в него превратить?