Ubuntu环境下替代SQLLDR向Azure SQL Server导入数据的方案咨询
适配需求的实现方案
可行性确认
完全可以使用Azure SQL配套的BCP工具实现你的需求,该工具是和Oracle SQLLDR定位一致的命令行批量数据导入工具,原生支持Ubuntu系统,无需依赖ADF,直接嵌入原有bash脚本即可完成改造,是最简易的实现方案。
默认情况下BCP导入就是追加写入目标表的效果,正好匹配你加载附加数据的需求。
Ubuntu系统安装BCP步骤
以下步骤适配Ubuntu 20.04/22.04 LTS版本:
- 导入Microsoft软件源公钥
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - - 注册对应版本的SQL Server软件源(以下为22.04版本示例,20.04版本将命令中的22.04替换为20.04即可)
sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list)" - 安装工具包及依赖
sudo apt update && sudo apt install -y mssql-tools unixodbc-dev - 配置环境变量方便全局调用
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc && source ~/.bashrc - 验证安装是否成功
执行bcp -v正常输出版本信息即为安装完成
BCP导入CSV命令示例
基础导入命令如下,参数可根据你的实际CSV格式调整:
bcp [数据库名].[schema名].[目标表名] in /本地路径/待导入数据.csv -S [Azure SQL服务地址,1433] -U [登录账号] -P [登录密码] -c -t ',' -r '\n' -F 2
参数说明:
-c:使用字符格式导入,无需额外编写格式文件,适配绝大多数CSV场景-t ',':指定字段分隔符为逗号,若你的CSV使用其他分隔符可替换对应值-r '\n':指定行分隔符为换行符,若CSV是Windows系统生成的可替换为\r\n-F 2:从第2行开始导入,用于跳过CSV的表头行,无表头可删除该参数- 可添加
-b 1000参数设置每1000条数据提交一次,大幅提升大批量数据导入的性能
原有Bash脚本改造注意事项
- 直接将原有调用SQLLDR的逻辑替换为上述BCP命令即可,整体执行逻辑无需大幅调整
- 不要在脚本中硬编码数据库账号密码,建议通过环境变量或者加密配置文件读取传入
- BCP命令执行成功返回码为0,失败返回非0值,可在脚本中增加返回值判断逻辑,实现导入结果的校验和异常处理
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

