Есть ли способ напрямую вставить данные из файла паркета в базу данных PostgreSQL? - PullRequest
2 голосов
/ 10 ноября 2019

Я пытаюсь восстановить некоторые архивные файлы резервных копий, сохраненные в формате паркета, и хочу один раз прочитать их и записать данные в базу данных PostgreSQL.

Я знаю, что файлы резервных копий сохранены с использованием spark, но для меня есть строгое ограничение: я не могу установить spark на компьютере с БД или прочитать файл паркета с помощью spark на удаленном компьютере и записать его в базу данных с помощью spark_df.write.jdbc. все должно происходить на компьютере с БД, и в отсутствие spark и Hadoop только с использованием сценариев Postgres и Bash.

моя структура файлов выглядит примерно так:

foo/
    foo/part-00000-2a4e207f-4c09-48a6-96c7-de0071f966ab.c000.snappy.parquet
    foo/part-00001-2a4e207f-4c09-48a6-96c7-de0071f966ab.c000.snappy.parquet
    foo/part-00002-2a4e207f-4c09-48a6-96c7-de0071f966ab.c000.snappy.parquet
    ..
    ..

Я ожидаю чтения данныхи схему из каждой папки паркета, например foo, создайте таблицу, используя эту схему, и запишите данные в созданную таблицу, используя только bash и Postgres CLI.

1 Ответ

2 голосов
/ 10 ноября 2019

Вы можете использовать spark и преобразовывать файлы паркета в формат csv, затем перемещать файлы на машину БД и импортировать их любыми инструментами.

spark.read.parquet("...").write.csv("...")
import pandas as pd
df = pd.read_csv('mypath.csv')
df.columns = [c.lower() for c in df.columns] #postgres doesn't like capitals or spaces

from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/dbname')

df.to_sql("my_table_name", engine)
...