如何在BigQuery中筛选数字/字母开头行并拆分导出大表?
解决SQL筛选以数字开头的uid问题及表拆分建议
原SQL语句无数据的原因
LIKE '^[0-9]%'写法错误:LIKE操作符不支持正则的^(行首锚定)和[0-9](字符组)语法,它只会匹配字面量以^[0-9]开头的uid,自然找不到符合条件的数据。- 注释中的
regex '^[0-9]%'也有问题:正则表达式里%不是通配符,应该用.*表示任意后续字符,且不同数据库的正则匹配函数名称不同,不能直接用regex作为关键字。
针对不同数据库的正确筛选语句
根据你使用的数据库类型,选择对应的语句:
BigQuery(适配Google生态,大概率适用)
SELECT * FROM MyTable WHERE REGEXP_CONTAINS(uid, r'^[0-9]')
MySQL/MariaDB
SELECT * FROM MyTable WHERE uid REGEXP '^[0-9]'
PostgreSQL
SELECT * FROM MyTable WHERE uid ~ '^[0-9]'
部分数据库(如SQL Server)可使用LIKE扩展语法
SELECT * FROM MyTable WHERE uid LIKE '[0-9]%'
表拆分导出的补充建议
如果按uid开头拆分后某部分数据量仍过大,可通过临时生成行号的方式均匀拆分:
-- 导出第一部分数据 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER () AS temp_id FROM MyTable ) t WHERE temp_id % 2 = 1
-- 导出第二部分数据 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER () AS temp_id FROM MyTable ) t WHERE temp_id % 2 = 0
内容的提问来源于stack exchange,提问作者アルサ
相关产品推荐
相关产品推荐

