从DLI导入数据到OBS,为什么数据量出现差异?
问题现象
使用DLI插入数据到OBS临时表文件,数据量有差异。
根因分析
出现该问题可能原因如下:
- 作业执行过程中,读取数据量错误。
- 验证数据量的方式不正确。
通常在执行插入数据操作后,如需确认插入数据量是否正确,建议通过查询语句进行查询。
如果OBS对存入的文件数量有要求,可以在插入语句后加入“DISTRIBUTE BY number”。例如,在插入语句后添加“DISTRIBUTE BY 1”,可以将多个task生成的多个文件汇总为一个文件。
操作步骤
- 在管理控制台检查对应SQL作业详情中的“结果条数”是否正确。 检查发现读取的数据量是正确的。
图1 检查读取的数据量
- 确认客户验证数据量的方式是否正确。客户验证的方式如下:
- 通过OBS下载数据文件。
- 通过文本编辑器打开数据文件,发现数据量缺失。
根据该验证方式,初步定位是因为文件数据量较大,文本编辑器无法全部读取。
通过执行查询语句,查询OBS数据进一步进行确认,查询结果确认数据量正确。
因此,该问题为验证方式不正确造成。
参考信息
插入数据的SQL语法,请参考《数据湖探索Spark SQL语法参考》。
运维指导 所有常见问题
- SQL作业运行慢如何定位
- 查看DLI SQL日志
- 查看DLI的执行SQL记录
- 执行SQL作业时产生数据倾斜怎么办?
- DLI控制台中无法查询到对应表
- OBS表压缩率较高
- 如何避免字符码不一致导致的乱码
- 删除表后再重新创建同名的表,需要对操作该表的用户和项目重新赋权
- DLI分区内表导入的文件不包含分区列的数据,导致数据导入完成后查询表数据失败
- 创建OBS外表,因为OBS文件中的某字段存在回车换行符导致表字段数据错误
- SQL作业中存在join操作,因为自动广播导致内存不足,作业一直运行中
- join表时没有添加on条件,造成笛卡尔积查询,导致队列资源爆满,作业运行失败
- 手动在OBS表的分区目录下添加了数据,但是无法查询到该部分数据
- 为什么insert overwrite覆盖分区表数据的时候,覆盖了全量数据?
- 为什么SQL作业一直处于“提交中”?
- 跨源连接RDS表中create_date字段类型是datetime,为什么dli中查出来的是时间戳呢?
- SQL作业执行完成后,修改表名导致datasize修改失败怎么办?
- 从DLI导入数据到OBS,为什么数据量出现差异?
more