Как перезаписать один раздел в Snowflake при использовании соединителя Spark

Есть ли способ, чтобы Spark прочитал один раздел даты из таблицы Snowflake, обновил его, а затем перезаписал этот раздел с одной датой. Должна поддерживаться одновременная запись. В настоящее время в Spark есть два режима перезаписи, поэтому я не вижу способа перезаписать один раздел. В Iceberg это легко сделать, поскольку в режиме перезаписи перезаписывается только один раздел. Я упускаю какое-то очевидное решение?

Меня интересует решение, которое не требует транзакций или сложных SQL-запросов. В идеале то же поведение, что и в Iceberg, то есть операция, позволяющая перезаписать один раздел.

В Snowflake нет разделов — по крайней мере, в том смысле, который, я думаю, вы имеете в виду, — поэтому ваш вопрос не имеет особого смысла. Это столбчатая база данных с микроразделами, которые доступны только для вставки. Если вы хотите обновить записи в таблице Snowflake, просто обновите их.

NickW 31.03.2024 09:39

Спасибо за ответ. Я вижу, что у Снежинки есть кластеризация. Это может повысить производительность, если объем обновлений находится в пределах одного раздела. Я вижу, что Снежинке сложно сказать, что она должна перезаписывать микроразделы только по какому-то ключу кластеризации. Я вижу, что у Snowflake нет простого способа добиться поведения overwrite_partition, что, на мой взгляд, неудобно.

oakX64 31.03.2024 16:17

Привет! Похоже, вы не понимаете, как устроена архитектура Snowflake, и применяете к Snowflake методы, которые вы нашли полезными в другой СУБД, - хотя они не актуальны или не применимы. Микроразделы Snowflake доступны только для чтения, поэтому их нельзя перезаписать; в Snowflake ничего нельзя перезаписать. Когда вы «обновляете» что-то в Snowflake, вы фактически вставляете данные в новые микроразделы, а Snowflake помечает старую версию как устаревшую. Если у вас есть конкретная проблема с производительностью в Snowflake, возможно, обновите свой вопрос, и люди смогут вам помочь.

NickW 31.03.2024 17:34

Спасибо за ваш комментарий. Я имею в виду, что я хочу, чтобы Spark создал кучу файлов с данными за «день», а Snowflake перезаписала свои старые файлы за этот день файлами, сгенерированными Spark. Микроразделы — это просто файлы/куча файлов + метаданные, если я правильно понял. Ничто не мешает ему создавать новые разделы на основе результатов Spark. В целом цель достижима, но не так просто, как, по крайней мере, в Iceberg, где не нужно писать «не Spark» код.

oakX64 31.03.2024 21:29
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
229
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Snowflake не хранит данные в виде файлов (при условии, что вы используете стандартные таблицы), поэтому в этом случае ваш последний комментарий, особенно «Snowflake перезаписывает свои старые файлы», по-прежнему не имеет особого смысла.

Предполагая, что в ваших таблицах Snowflake есть столбец, указывающий «день», вы можете удалить эти записи и загрузить последние файлы Spark в Snowflake. Если ваш новый набор файлов представляет собой изменение данных в существующих записях в Snowflake, вы потенциально можете вставить/обновить/удалить их с помощью оператора слияния.

Если вы говорите о каком-то типе внешней таблицы Snowflake (которая находится над файлами, хранящимися в облачной системе хранения), то вы можете управлять этими файлами вне Snowflake и просто обновлять метаданные в Snowflake по мере необходимости.

Если вы просто пытаетесь переместить данные из Spark в Snowflake, я бы начал с прочтения этой части документации.

Помечено как принятый ответ. Я вижу, что для искрового писателя нет режима overwrite_partition. Спасибо за ответ

oakX64 01.04.2024 14:04

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

Похожие вопросы

Настройка MemoryStream Apache Spark для имитации потока Kafka
Зависит ли хорошая работа динамического распределения Spark от внешней службы перемешивания?
Преобразования, связанные с производительностью PySpark, и последовательное переназначение
Соединение двух фреймов данных pyspark и продолжение вычисления суммы и максимума текущего окна
AttributeError: не удается получить атрибут «PySparkRuntimeError», когда я пытаюсь применить .collect() к некоторому RDD.map(...).distinct()
Проблемы с версией Apache Sedona
SbtPublishLocal проекта с предоставленными зависимостями в build.sbt не делает эти зависимости видимыми для проектов, использующих проект в качестве библиотеки
Как прочитать входной json, используя файл схемы, и заполнить значение по умолчанию, если столбец не найден в Scala?
Как заполнить значение по умолчанию для отсутствующего ключа в Json в Scala Dataframe?
Преобразование Dataframe во вложенный Json в Scala