google-cloud-platform - BigQuery 从列中删除 <0x00> 隐藏字符
问题描述
我有一张包含不需要的隐藏字符的表格,例如my_table
:
ID | 水果 |
---|---|
1 | STuff1 stuff_2 ������������������������ |
2 | Blahblah-blahblah ������������</td> |
3 | 没有 |
����������������������
选择此列时如何删除?
当前查询:
SELECT fruits, TRIM(REGEXP_REPLACE(fruits, r'[^a-zA-Z,0-9,-]', ' ')) AS new_fruits
FROM `project-id.MYDATASET.my_table`
这个查询太有缺陷了,因为我担心如果我不小心排除/替换了重要数据。我只想具体谈谈这个奇怪的角色。
以 csv 格式打开数据后,奇怪的字符显示为<0x00>
. 我该如何解决这个问题?
解决方案
首先你必须确定哪个是这个字符,因为它是不可打印的,这个标志只是一个随机表示。要在不删除任何其他重要信息的情况下替换它,请执行以下操作:
识别字符的十六进制。从本网站上的 csv 和过去复制:
使用 bigquery 中的 replace 函数替换此十六进制的字符,如下所示:
SELECT trim(replace(string_field_1,chr(0xfffd)," ")) FROM `<project>.<dataset>.<table>`;
如果您的字符结果与 fffd 不同,请将您的值放在 chr() 函数上
推荐阅读
- python - 如何引用 __init__ 超类中定义的函数
- python - Sqlalchemy add_all() 忽略重复键 IntegrityError
- daemon - 如何使用 systemd 服务以守护程序模式运行进程?
- sql-server - 通过 VBA 连接 SQL Server 时出错
- azure - 如何使用 Azure Active Directory 在 Web 应用程序中刷新访问令牌
- django - Django - 关系“app_name_modelname”不存在
- angular - Angular - 选中/取消选中所有复选框
- oracle - 将数据从 HDFS 导出到 oracle 时,sqoop 无法将 long 转换为时间戳
- pytorch - 如何运行 Tensorboard 创建的事件
- python - 如何使用排序函数 discord.py?