В 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;
Использование 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
*/
Связанный:
@ 0004 Да, вы можете легко запустить его через пользовательский интерфейс Snowsight Snowflake — вызов кода Python, и если вы параметризуете имя таблицы src / target и нажмете кнопку развертывания, она создаст хранимую процедуру Python.
Код, которым вы поделились, удаляет столбцы со значениями. Есть идеи, почему? Например, он удалил столбец идентификатора, который имел такие значения, как 0041X00002OEkZ5QAL.
@0004 Пожалуйста, поделитесь образцом данных в форме CREATE TABLE
и INSERT INTO
, чтобы воспроизвести этот сценарий — я не могу его воспроизвести — i.stack.imgur.com/NUkpF.png. Код выполняет COUNT (col), и если все значения в этом столбце равны NULL, он возвращает 0, что указывает на то, что этот столбец следует пропустить из кадра данных.
в таблице 300 столбцов, так что это было сложно, но я внес изменения в вашу
@0004 Укажите тип данных, а также значение «0041X00002OEkZ5QAL», скорее всего, не INT
это VARCHAR(16777216) Каждый столбец в таблице будет отличаться в любом из типов данных, доступных за пределами варианта
@ 0004 Я попробовал приведенный вами пример, и столбец НЕ был удален: i.stack.imgur.com/fqmLZ.png - В качестве отладки я предлагаю закомментировать часть «# сохранить как новую таблицу без столбцов NULL». , return dropcols
и вручную сравните с таблицей.
буду пересматривать, спасибо
Да, это сработало, вы снова правы, спасибо! Получил еще один, если вы ищете очки! stackoverflow.com/questions/76057823/…
есть шанс, что я могу написать код непосредственно в пользовательском интерфейсе Snowflake, не хочу иметь доступ к API для безопасности, это также быстрый анализ. т.е. udf python или javascript? Или просто sql?