#python #apache-spark #amazon-redshift
#python #apache-spark #amazon-redshift
Вопрос:
Я создаю процесс ETL с использованием PySpark, который работает на Python 3, Apache Spark 2 и Fedora 20.
Я также создаю автоматические тесты для фреймворка, но я борюсь с удалением данных в конце тестов.
Я могу настроить определенные данные в кластере AWS Redshift с помощью Spark, но, за исключением удаления всех данных в таблице, похоже, не могу удалить определенные данные.
Если я попытаюсь выполнить УДАЛЕНИЕ ИЗ…ГДЕ… Я получаю недопустимую ошибку команды. Это не проблема с разрешениями, поскольку точная команда выполняется для одного и того же пользователя в нашей среде IDE DB (Aquafold data studio 17).
Не хватает установки чего-то вроде psycopg2 или pyodbc (что кажется излишним) Я не уверен, как добиться эквивалентного УДАЛЕНИЯ с помощью предложения WHERE.
Ответ №1:
Драйвер AWS Redshift имеет несколько опций, и среди них, в частности, две
- предварительные
- постакции
Они могут содержать инструкции SQL, которые должны выполняться в AWS Redshift.
Там, где есть несколько операторов, они должны быть разделены точкой с запятой.
НЕ завершайте заключительный оператор точкой с запятой, поскольку драйвер считает, что существует последующий запрос, и завершается ошибкой.
Если в параметрах указаны предварительные или последующие действия, то они должны содержать действительный SQL, они не могут быть пустыми. Достаточно простого ВЫБОРА 1.
Обратите внимание, что есть еще один вариант, который рекомендуется использовать.
"extracopyoptions="ACCEPTINVCHARS ' '"
AWS Redshift не поддерживает символы NVARCHAR и рассматривает NVARCHAR как синоним VARCHAR . Приведенный выше параметр перекодирует любые символы, не понятые RedShift, как пустое пространство.