我们的Oracle数据源之一具有数百个表,所有数字列使用数字数据类型定义的所有数字列,而无需精确和规模。但是实际上,列可以存储纯整数值或小数值 - 无法单独查看数据类型来说明这一点。现在,这是一个大问题,因为当我尝试将任何这些数据加载到大数据工具(SQoop,Hive,Spark等)时,所有这些工具将这些列视为字符串,这是一个非常痛苦的问题。我认为这是所有基于JDBC/Java工具的问题。
是否可以以某种方式检测存储在具有数字类型的列中的值的实际精度和比例。我希望Oracle在元数据表中将其保存在某个地方,但我在任何地方都看不到。我的最后一个手段是在表中随机对数据进行随机抽样,并在侧面存储转换模式,但我希望有更好的方法。我真的做
例如,表TEST
具有三列ID
,AMOUNT
和QUANTITY
,均声明为没有指定精度或比例的数字。
但实际上ID
应该是一个bigint,AMOUNT
应该是十进制(18,6),QUANTITY
应该是INT。
create table test (
ID number,
AMOUNT number,
QTY number
)
ID AMOUNT QTY
1 200.56 4
2 23.754 5
我不可能手动进行映射,因为我有600个表,每个表有50-300列。数据采样是我的最后一个度假胜地。
oracle号码类型默认为38.0
以创建SCALE
和PRECISION
定义为NUMBER
列时,您可以查询Oracle Oracle的数据字典ALL_TAB_COLUMNS
,或USER_TAB_COLUMNS
如果所有表都在同一模式下。
这些视图将信息保存在DATA_PRECISION
和DATA_SCALE
。