В работе AWS Glue Spark не поддерживается имя столбца верхнего регистра с двойными кавычками - PullRequest
0 голосов
/ 25 сентября 2019

Постановка проблемы / первопричина. Мы используем AWS Glue для загрузки данных из рабочей базы данных PostGress в AWS DataLake.Клей внутренне использует задание Spark для перемещения данных.Однако наш процесс ETL терпит неудачу, поскольку Spark поддерживает только имена столбцов таблицы в нижнем регистре, и, к сожалению, все имена столбцов нашей исходной таблицы PostGress находятся в CamelCase и заключены в двойные кавычки.

Например: имя столбца нашей исходной таблицы вБД PostGress - "CreatedDate".Запрос задания Spark ищет созданную дату и не выполняется, поскольку не может найти имя столбца.Таким образом, в запросе задания искры должен быть указан именно «CreatedDate», чтобы можно было перемещать данные из базы данных PostGress.Похоже, что это является внутренним ограничением Spark (поскольку он поддерживает только имена столбцов таблицы в нижнем регистре) и PostGress (имена столбцов, которые были созданы с двойными кавычками, должны быть заключены в двойные кавычки на всю оставшуюся жизнь).

Справочные ссылки: https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html Учитываются ли имена столбцов PostgreSQL с учетом регистра?

Решения оценены: 1. Мы не сможем переименовать имена столбцов из CamelCase в строчныепоскольку это потребует большего изменения во всех последующих системах.2. Мы пытаемся переписать / настроить автоматически сгенерированный код Spark в Glue, чтобы посмотреть, сможем ли мы заставить его работать с двойными кавычками, не строчными именами столбцов исходной таблицы.

Кто-нибудь сталкивался с этой проблемой раньше?и пытались ли вы настроить автоматически сгенерированный код Spark, чтобы он заработал?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Сандип Фатангаре спасибо за ваши предложения.

Я новичок в AWS Glue. Не знаю, правильно ли я поступаю.Если я ошибаюсь, сообщите мне.

Я пытаюсь отредактировать сценарий, перейдя к

AWS Glue -> Jobs и выбрав неудавшийся сценарий задания

на вкладке сведений., это показывает местоположение "местоположение, упомянутое в деталях работы, является s3: //aws-glue-assets-us-east-1/scripts/glueetl/jdbc_incremental.py".

И в СценарииВкладка Я начинаю редактировать скрипт

предыдущий:

applymapping1 = ApplyMapping.apply (frame = datasource0, mappings = self.get_mappings (), translation_ctx = "applymapping1_" + self.source.table_name)

Отредактировано: applymapping1 = ApplyMapping.apply (frame = datasource0, mappings = self.get_mappings (), caseSensitive: Boolean = false, translation_ctx = "applymapping1_" + self.source.table_name)

И я столкнулся с 2 проблемами

  1. Я не могу сохранить отредактированный скрипт
  2. И при запуске скрипта он сказал мне, что отсутствует имя рабочего процесса
0 голосов
/ 25 сентября 2019

Решение 1: Если вы используете динамический фрейм scala и glue, вы можете использовать applyMapping().Значение по умолчанию для caseSensitive равно true.Проверьте https://docs.aws.amazon.com/glue/latest/dg/glue-etl-scala-apis-glue-dynamicframe-class.html#glue-etl-scala-apis-glue-dynamicframe-class-defs-applyMapping

Решение 2: если вы используете pyspark dataframe в python, вы можете установить conf:

spark_session.sql('set spark.sql.caseSensitive=true')
...