Как сохранить / скопировать значение столбца таблицы, не указанного в списке столбцов csv, в команде vertica copy

#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’, независимо от того, какойпорядок есть.