#python #vertica
#python #vertica
Вопрос:
Я использую следующий код для копирования данных из csv в таблицу vertica.
copy_command = 'COPY cb.table_format2 (ACC_NO, REF_NO, CUSTOMER_NAME, ADDRESS) FROM STDIN '
'ENCLOSED BY '"' delimiter ',' SKIP 1 '
'exceptions '' file_path_exception '' rejected data '' file_path_rejected '';'
with open(file_path, "rb") as inf:
cur.copy(copy_command, inf)
У меня есть еще одно поле с именем ‘FileId’ в таблице vertica, и я хочу заполнить его значением моей локальной переменной, чтобы позже я мог проверить, какие данные вводятся для какого fileId, и в моих будущих требованиях я также хочу сохранить созданную дату и идентификатор сеанса пользователя в других столбцахтоже.
Пожалуйста, дайте мне знать, как я могу это сделать? Возможно ли даже это или нет? Если это невозможно сделать, то каковы другие способы убедиться, какие данные сохраняются / копируются с какой отметкой времени и сеансом пользователя?
Заранее спасибо за помощь.
Обновление: — Я использую python 3 и модуль vertica_python для подключения к vertica из python.
Ответ №1:
Вам необходимо использовать AS
выражения sql для полей. Вы не указываете, какой модуль python вы используете, но вы можете сделать это как литерал. Добавьте в новое поле запись, которая выглядит как:
FILEID AS 123456
И просто сделайте так, чтобы ваша строка выглядела именно так (возможно, используя форматировщик или значение привязки).
Комментарии:
1. Я использую python 3 и модуль vertica_python для подключения к vertica из python.
2. Теперь я хочу сопоставить столбец из csv в таблицу vertica, поскольку мой csv-файл может иметь разный порядок столбцов при каждом вызове.
3. должен ли я создать еще один вопрос для этого?
4. Порядок полей в КОПИИ — это порядок из csv. Вы, по сути, позиционно сопоставляете поля. Поэтому, если столбец находится в другом порядке в файле, чем в таблице, вам просто нужно сообщить оператору КОПИРОВАНИЯ, в каком порядке поля поступают и к каким полям таблицы они сопоставляются.
5. не могли бы вы привести пример (с кодом) для сопоставления. В моем случае порядок может меняться при каждом вызове. Но имя столбца в csv будет таким же. При первом вызове адрес находится в 1-м столбце csv, при втором вызове — в 5-м столбце, а при третьем вызове — во 2-м столбце и так далее, я хочу, чтобы этот столбец csv с именем address всегда сохранялся / копировался в столбце таблицы с именем ‘Address’, независимо от того, какойпорядок есть.