繁体   English   中英

从Google BigQuery过滤掉或替换非英文字符

[英]Filtering out or replacing non English characters from 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 - שולחן   

此问题与Python 2.7有关,并且缺少对处理unicode的支持,因此所有内容均以基本ASCII(7位)进行编码。

不丢失这些字符的一种方法是在脚本的UTF-8中明确工作:

outfile.write("%s" %(row[key].encode('utf-8'))

这就是在python 3.x中默认发生的情况,因此这就是为什么您不会看到错误的原因。

尽管如此,也许最佳实践可能是先将这些数据导出到GCS,然后从那里进行工作(如果可以的话,还可以迁移到Python 3.x,这样会更好;)!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM