Команда Bcp в Microsoft Azure - PullRequest
       6

Команда Bcp в Microsoft Azure

0 голосов
/ 21 ноября 2018

Я пытаюсь использовать bcp command для добавления данных в существующую таблицу в azure db.

Когда я экспортирую файл csv \ txt прямо из командной строки - он выглядит как двоичный файлфайл, а затем импорт из этого файла проходит нормально.

Но если я пытаюсь взять python pandas dataframe, который имеет те же данные и сохранить его как csv \ txt, содержимое отличается - естьнет двоичных данных - только нормальные значения.

Но затем, после импорта из этого файла - нет ошибки, но импортировано 0 строк ...

Как я могу создать csv из кадра данных, который будет таким же, как bcp csv?

это мой рабочий код (прямо из командной строки):

--export
bcp "select * from tbl where val=1" queryout "Test\tbl1.csv" -S <server> -d <db> -U <user> -P <password> -q -n -t,

--import
bcp tbl2 in "Test\tbl1.csv" -S <server> -d <db> -U <user> -P <password> -q -n -t,

это мой код Python:

import subprocess as sp
...
df0.to_csv('tm2.csv',encoding='utf8',index=None,sep=',',header=None)

cmd2='bcp tbl2 in "Test\tm2.csv" -S <server> -d <db> -U <user> -P <password> -q -t, -n'

sp.call(cmd2)

но таблица tbl2 без изменений.

1 Ответ

0 голосов
/ 23 ноября 2018

В вашей командной строке bcp есть проблема.Согласно официальному документу о утилите bcp , опция -n означает использование собственных типов данных (базы данных), которые экспортируют данные в двоичном формате, см. Ниже.

-n Выполняет операцию массового копирования, используя собственные типы данных (базы данных).Эта опция не запрашивает для каждого поля;он использует собственные значения.

Дополнительные сведения см. в Использование собственного формата для импорта или экспорта данных (SQL Server) .

Однако в вашем сценарииЧтобы импортировать / экспортировать файл данных в формате csv, необходимо использовать параметр -c, см. пояснения ниже.

-c Выполняет операцию с использованием символьного типа данных.Эта опция не запрашивает для каждого поля;он использует char в качестве типа хранилища, без префиксов и с \ t (символ табуляции) в качестве разделителя полей и \ r \ n (символ перевода строки) в качестве разделителя строки.-c несовместим с -w.

Для получения дополнительной информации см. Использование формата символов для импорта или экспорта данных (SQL Server) .

Так что еслиВы хотите импортировать файл данных csv, экспортированный из фрейма данных Pandas, правильный способ - использовать -c вместо -n, тогда он работает для импорта и экспорта файла данных формата CSV с помощью bcp в базе данных SQL.

...