SQL-запрос Aws Athena не работает в Apache Spark

У меня есть запрос, который работает в 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-запрос для запуска в искре.

Ожидаемый результат:

Дата общий имя_столбца не ноль 2002-1-1 5 столбец 1 4 2002-1-1 4 столбец 2 2

1) «У меня есть запрос, который работает в Athena, но не работает в Spark SQL». - а почему это должно быть? Athena основана на Presto/Trino, у которого другой диалект SQL. 2) "не работает" - "не работает" не очень полезно, как именно это не работает? Ошибка синтаксиса? Неправильные результаты? 3) Вы показали ожидаемый результат, но каковы примерные данные, которые следует в него превратить?

Guru Stron 18.03.2024 11:33

Пример данных взят из таблицы и ничего больше. Мне нужен точно такой же рабочий запрос в Spark sql. Это может быть с изменением имени функции или использованием других функций.

Anand Kulkarni 18.03.2024 11:53

«Образец данных взят из таблицы и ничего больше» — у нас нет доступа к вашей таблице.

Guru Stron 18.03.2024 11:54

«Мне нужен точно такой же рабочий запрос в Spark sql» - вы до сих пор не предоставили подробную информацию, что именно у вас не работает.

Guru Stron 18.03.2024 11:55

Упомянутый выше запрос работает в athena. Но когда я выполнил тот же запрос в spark.sql(). Я провалил. у меня есть таблица с 2 миллионами записей. Необходимо вычислить отсутствующие и неотсутствующие данные для каждого столбца, длина которого превышает 150 столбцов. с той же логикой, используя другую функцию, можно достичь. я работаю над этим

Anand Kulkarni 18.03.2024 12:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
5
120
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проверьте запрос ниже, преобразованный в 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 строки выше ожидаемого результата. но когда я выполнил приведенный выше запрос, он умножил записи и дал четыре строки в приведенном выше случае.

Anand Kulkarni 19.03.2024 06:12

Когда мы выполняем вычисления массивов в перекрестном соединении с использованием столбцов из cte вместо unnest cte, оно не умножается. но когда мы используем unnest _cte и выполняем перекрестное соединение, оно умножается.

Anand Kulkarni 19.03.2024 06:23

Я дал идею о том, как преобразовать в искру. В остальном вы можете отладить больше и опубликовать это как новый вопрос.

s.polam 19.03.2024 06:28

Я могу выполнить запрос, используя боковой вид Inline...

Anand Kulkarni 20.03.2024 03:48

Другие вопросы по теме