sql-loader - sqlldr 无法识别空制表符分隔的列
问题描述
使用 sqlldr 加载数据时,我看到一个奇怪的问题。这是我的表架构:
CREATE TABLE TEST(
"COL1" VARCHAR2 (255 BYTE),
"COL2" VARCHAR2 (255 BYTE),
"COL3" NUMBER,
"COL4" VARCHAR2 (255 BYTE)
这只是我试图从制表符分隔文件 test.txt 中提取的一行数据:
COL1 COL2 COL3 COL4
10 17-cc
请注意,前两列是空的(null)。所以我的行真的是:
\t\t10\t17-cc
我的加载程序脚本:
load data
infile 'test.txt'
append into table TEST
fields terminated by "\t" optionally enclosed by '"'
TRAILING NULLCOLS
(COL1,COL2,COL3,COL4)
这将被加载到我的表中:
COL1 COL2 COL3 COL4
10 17-CC (null) (null)
这是不正确的。似乎数据行中的两个前导选项卡被忽略了,COL3 位置 (10) 分配给了 COL1。但是,如果我尝试将数据作为逗号分隔文件导入:
COL1,COL2,COL3,COL4
,,10,17-cc
它按预期工作。为什么制表符分隔的版本在这里失败?
解决方案
注意 - 修正了我原来的错误答案。
您的 TAB 定义得很好。您需要 NULLIF 语句:
load data
infile 'test.txt'
append into table TEST
fields terminated by "\t" optionally enclosed by '"'
TRAILING NULLCOLS
(COL1 NULLIF(COL1=BLANKS),
COL2 NULLIF(COL2=BLANKS),
COL3 NULLIF(COL3=BLANKS),
COL4 NULLIF(COL4=BLANKS)
)
推荐阅读
- reactjs - 我们可以在 getDerivedStateFromError() 中期待什么错误类型?
- javascript - 我对 ajax 查询 CODEIGNITER 有错误
- scala - 如何正确加入 Apache Spark 中的 2 个数据框?
- laravel - 尝试更改 Laravel 的分页→项目中的数据但失败,我该如何解决?
- c# - C# - 通过 mongodb 驱动程序检查字典是否包含空值
- javascript - NodeList.forEach 中的 appendChild 仅附加 readableStream 中的第一个元素
- c# - 如何修复从列表中选择元素的递归方法
- google-apps-script - 在应用程序脚本中使用库时,无效电子邮件:发生未定义错误,但如果我直接使用库代码,就可以了
- google-sheets - 有没有办法在电子表格的“GoogleTranslate()”函数中跳过翻译中的特定单词?
- c# - 将网格视图行转换为列