我正在工作的bash脚本有两个命令:
/opt/mssql-tools/bin/bcp buyerhero.dbo.PeopleEmail OUT "D:/Data/people/PeopleEmail_06272020.csv" -F2 -U<<USER>> -P<<PASSWORD>> -S<<SERVER>> -t"§" -c
gsutil cp D:/Data/people/PeopleEmail_{date}.csv gs://offrs_table_files/PeopleEmail/To_Process/PeopleEmail_06272020.csv
目标是从MSSQL导出数据并将其上传到Google Big Query。上面的两个命令代表初步命令。
虽然命令有效,但BCP却输出了奇怪的消息。
22§7279373929§Line§429734616§1434114003§0§1§Data§2017-07-29§963313836§§143414003§§§§§§§1
23§9097671326§Line§4973325331659§1491223321237§0§1§Data§2017-07-29§963383261§§149031237§§§§§§§1
24§9512444462§Line§2222§5431230333372§0§1§Data§2017-07-29§9852228534§§54303372§§§§§§§1
分隔符是§。表格前的怪异“ A”不在表格中,而是显示在CSV中。
我仔细检查了sql server中的表,但它们不存在。 BCP命令安装在远程linux机器上。
这是几天前才开始发生的。 我该如何解决? 谢谢!
答案 0 :(得分:1)
如果self的话,数据中似乎提供了高ASCII字符(即> 127)。文件中出现的字符为SELECT CHAR(194)
。
您可以通过用空白(SELECT REPLACE([COLUMNNAME], CHAR(194), '')
代替Â从数据(表PeopleEmail)中删除此字符。但是,我不确定是否对您的应用有任何含义。因此,我建议在对表数据进行任何更新之前,先交叉检查并再次确认。
您还可以尝试通过将字符Â替换为空白来使用queryout。像下面这样
bcp "SELECT REPLACE(COLUMN1+'§'+COLUMN2+'§'+COLUMN3+'§'+COLUMN4, CHAR(194), '') FROM [Database].[Schema].[Table]" queryout "File.csv" -U [Username] -P [Password] -S [Server]
不确定我的回答可以为您提供多长时间。但是,如果能以某种方式有所帮助,我会很高兴。