如何检查 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' ... ... ... ... ...

有几种可能性:

  1. 尝试将值转换为 bigint 和 select 行,转换结果为 nil:
select * from test where cast(data as bigint) is null
  1. 使用regexp运算符(doc)执行检查:
select * from test where data not regexp '^[0-9]+$'

两种方法都给出了相同的结果,尽管我认为第一种方法会快一点(尽管它需要测试来确认)。