如何检查 Delta Table 中字符串列中的哪条记录是非数字的
How to Check Which Record is non-numeric in a String Column in Delta Table
我正在使用 Azure 上的 Databricks 开发 Delta table。
Delta table 包含大约 1 亿条包含许多列的记录。一列数据类型为String,但包含大数(BIGINT)。只有一些记录具有一些随机的非数字值。
问题:有没有办法通过Databricks Select来自这个table的这些非数字记录SQL笔记本?
数据示例:
A
B
C
D
E
...
'838472910'
...
...
...
...
...
'392018'
...
...
...
...
...
'10293849021'
...
...
...
...
...
'NULL'
...
...
...
...
...
'9384038'
...
...
...
...
...
'21314'
...
...
...
...
...
'UNMAPPED'
...
...
...
...
...
'3840594739'
...
...
...
...
...
'UNIDENTIFIED'
...
...
...
...
...
'29380072'
...
...
...
...
...
'592812012'
...
...
...
...
...
'8432178930'
...
...
...
...
...
'EMPTYVALUE'
...
...
...
...
...
有几种可能性:
- 尝试将值转换为
bigint
和 select 行,转换结果为 nil
:
select * from test where cast(data as bigint) is null
- 使用
regexp
运算符(doc)执行检查:
select * from test where data not regexp '^[0-9]+$'
两种方法都给出了相同的结果,尽管我认为第一种方法会快一点(尽管它需要测试来确认)。
我正在使用 Azure 上的 Databricks 开发 Delta table。
Delta table 包含大约 1 亿条包含许多列的记录。一列数据类型为String,但包含大数(BIGINT)。只有一些记录具有一些随机的非数字值。
问题:有没有办法通过Databricks Select来自这个table的这些非数字记录SQL笔记本?
数据示例:
A | B | C | D | E | ... |
---|---|---|---|---|---|
'838472910' | ... | ... | ... | ... | ... |
'392018' | ... | ... | ... | ... | ... |
'10293849021' | ... | ... | ... | ... | ... |
'NULL' | ... | ... | ... | ... | ... |
'9384038' | ... | ... | ... | ... | ... |
'21314' | ... | ... | ... | ... | ... |
'UNMAPPED' | ... | ... | ... | ... | ... |
'3840594739' | ... | ... | ... | ... | ... |
'UNIDENTIFIED' | ... | ... | ... | ... | ... |
'29380072' | ... | ... | ... | ... | ... |
'592812012' | ... | ... | ... | ... | ... |
'8432178930' | ... | ... | ... | ... | ... |
'EMPTYVALUE' | ... | ... | ... | ... | ... |
有几种可能性:
- 尝试将值转换为
bigint
和 select 行,转换结果为nil
:
select * from test where cast(data as bigint) is null
- 使用
regexp
运算符(doc)执行检查:
select * from test where data not regexp '^[0-9]+$'
两种方法都给出了相同的结果,尽管我认为第一种方法会快一点(尽管它需要测试来确认)。