python - 从 Google BigQuery 中过滤或替换非英文字符
问题描述
我正在从 Google Biqquery 中的查询中提取数据。我通过 python 脚本连接到 Google API,在 python 脚本中执行查询并将查询结果写入 CSV 文件。当我从脚本中对样本数据(100 行)执行查询时,一切看起来都很好。但是当我为整个数据执行脚本时,它失败了。
UnicodeEncodeError:“ascii”编解码器无法在位置 38 编码字符 u'\xe7':序数不在范围内(128)
我看到这是一个 python 错误,但是当脚本试图处理具有非英文字符的记录时会发生这种情况。我在 Hive 中遇到了同样的问题,但我通过使用下面给出的 RLIKE 函数解决了这个问题
(CASE WHEN FIELD1 not rlike '[^a-zA-Z()\\|\\d\\s\\(_)\\-\\(/):]' THEN FIELD1 ELSE 'data' END) AS FIELD1
Google BigQuery 中是否有类似的方法或功能来查找和替换非英文字符?或者,这可以在 python 脚本中处理吗?
代码片段:
job_id, _results = MY_CLIENT.query("""select FIELD1, FIELD2, FIELD3, FIELD4 FROM TABLE1""", use_legacy_sql=True)
complete, row_count = MY_CLIENT.check_job(job_id)
results = MY_CLIENT.get_query_rows(job_id)
outfile = open('C:\\Users\\test.csv', 'w')
for row in results:
for key in row.keys():
if key == 'FIELD4':
outfile.write("%s" %str(row[key]))
else:
outfile.write("%s," %str(row[key]))
outfile.write("\n")
outfile.close()
提前感谢您的帮助!
解决方案
您可以使用以下内容删除非 ascii 字符
REGEXP_REPLACE(field1, r'([^\p{ASCII}]+)', '')
下面是你可以玩的例子,看看它是如何工作的
#standardSQL
WITH `project.dataset.table` AS (
SELECT '12 - Table - Стол - test' AS field1 UNION ALL
SELECT '23 - Table - الطاولة' UNION ALL
SELECT '34 - Table - שולחן'
)
SELECT
REGEXP_REPLACE(field1, r'([^\p{ASCII}]+)', '') AS ascii_only,
field1
FROM `project.dataset.table`
结果
Row ascii_only field1
1 12 - Table - - test 12 - Table - Стол - test
2 23 - Table - 23 - Table - الطاولة
3 34 - Table - 34 - Table - שולחן
推荐阅读
- process - 创建进程或线程哪个更快?为什么?
- python - Python - 拆分列表以获取最小值和最大值
- python - 运行软件源导致 Python 错误 (LMDE 3)
- c# - 扩展 Windows 10 中音量变化的音量控制(类似于 Windows 上的 Spotify)
- node.js - 两个不同密码的 .env 环境
- spring-boot - Spring 和 Kafka:对 Kafka Producer 和 Kafka Streams 使用相同的绑定
- flutter - 如何在颤动中更改我的平面按钮的位置......(从最左边到最右边)
- java - 查找与用户输入匹配的数组中的第一个元素并在 2 个二维数组之间打印该位置
- javascript - 如何使用模态对话框库将用户输入存储为变量?(JavaScript)
- c++ - (char*)&obj 替代品