Можно ли в снежинке написать запрос, в котором перечислены столбцы со всеми нулевыми значениями?

В Snowsight внутри Snowflake вы можете профилировать таблицы и видеть процент нулевых значений в пользовательском интерфейсе, но есть ли простой способ запросить эти данные или экспортировать их из пользовательского интерфейса? Мне просто нужно создать новую таблицу из таблицы с 1k+, но исключить столбцы, которые имеют только нулевые значения?

Вход:

CREATE OR REPLACE TABLE TAB(Q INT, X INT, Y INT, Z INT)
AS
SELECT NULL, 0041X00002OEkZ5QAL,2, NULL UNION ALL
SELECT NULL, NULL, NULL, NULL UNION ALL
SELECT NULL, NULL, NULL, NULL UNION ALL
SELECT NULL, NULL, 2, NULL;
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Использование Snowpark для удаления всех столбцов, допускающих значение NULL:

import snowflake.snowpark as snowpark
from snowflake.snowpark.functions import col, count

def main(session: snowpark.Session): 
    # input
    df = session.table('PUBLIC.TAB')

    # columns with all nulls
    dropcols = [c for c in df.columns if df.agg(count(col(c))).collect()[0][0]==0]

    # save as new table without nulls columns
    df.drop(dropcols).write.save_as_table('PUBLIC.TAB_WITHOUT_NULL',mode='overwrite')
            
    return 'Success'

Для ввода:

CREATE OR REPLACE TABLE TAB(Q INT, X INT, Y INT, Z INT)
AS
SELECT NULL, 1,2, NULL UNION ALL
SELECT NULL, NULL, NULL, NULL UNION ALL
SELECT NULL, 3, NULL, NULL UNION ALL
SELECT NULL, NULL, 2, NULL;

SELECT * FROM TAB;
/*
Q   X   Y   Z
    1   2   
        
    3       
        2   
*/

Выход:

SELECT * FROM TAB_WITHOUT_NULL;
/*
X   Y
1   2
    
3   
    2
*/

Связанный:

есть шанс, что я могу написать код непосредственно в пользовательском интерфейсе Snowflake, не хочу иметь доступ к API для безопасности, это также быстрый анализ. т.е. udf python или javascript? Или просто sql?

0004 18.04.2023 22:29

@ 0004 Да, вы можете легко запустить его через пользовательский интерфейс Snowsight Snowflake — вызов кода Python, и если вы параметризуете имя таблицы src / target и нажмете кнопку развертывания, она создаст хранимую процедуру Python.

Lukasz Szozda 19.04.2023 08:17

Код, которым вы поделились, удаляет столбцы со значениями. Есть идеи, почему? Например, он удалил столбец идентификатора, который имел такие значения, как 0041X00002OEkZ5QAL.

0004 19.04.2023 19:14

@0004 Пожалуйста, поделитесь образцом данных в форме CREATE TABLE и INSERT INTO, чтобы воспроизвести этот сценарий — я не могу его воспроизвести — i.stack.imgur.com/NUkpF.png. Код выполняет COUNT (col), и если все значения в этом столбце равны NULL, он возвращает 0, что указывает на то, что этот столбец следует пропустить из кадра данных.

Lukasz Szozda 19.04.2023 19:43

в таблице 300 столбцов, так что это было сложно, но я внес изменения в вашу

0004 19.04.2023 19:44

@0004 Укажите тип данных, а также значение «0041X00002OEkZ5QAL», скорее всего, не INT

Lukasz Szozda 19.04.2023 19:47

это VARCHAR(16777216) Каждый столбец в таблице будет отличаться в любом из типов данных, доступных за пределами варианта

0004 19.04.2023 19:53

@ 0004 Я попробовал приведенный вами пример, и столбец НЕ был удален: i.stack.imgur.com/fqmLZ.png - В качестве отладки я предлагаю закомментировать часть «# сохранить как новую таблицу без столбцов NULL». , return dropcols и вручную сравните с таблицей.

Lukasz Szozda 19.04.2023 19:58

буду пересматривать, спасибо

0004 19.04.2023 20:02

Да, это сработало, вы снова правы, спасибо! Получил еще один, если вы ищете очки! stackoverflow.com/questions/76057823/…

0004 19.04.2023 20:36

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