2017-11-30 14 views
0

Bigquery에서 설문 조사 웹 후크 데이터를 수신합니다. 현지 언어로 된 주석은 유니 코드 및 특수 문자로 캡처됩니다. 유니 코드를 현지 언어로 변환하고 특수 문자를 피하기 위해 정규 표현식을 사용하는 함수를 작성했습니다.ReGex for emoji - 유니 코드/BigQuery

#standardSQL 
CREATE TEMP FUNCTION DecodeUnicode(s STRING) AS (
(SELECT CODE_POINTS_TO_STRING(ARRAY_AGG(CAST(CONCAT('0x', x) AS INT64))) 
FROM UNNEST(SPLIT(s, '\\u')) AS x 
WHERE x != '' 
) 
); 
WITH NPSDashboard_Webhook_Data1_copy AS (
SELECT 
TRIM(Comment) Comment 
FROM 
`radiant-micron-790.Sharmila_Testing.NPSDashboard_Webhook_Data1_copy` 
) 
, 
uchars AS (
SELECT DISTINCT 
c, 
DecodeUnicode(c) uchar 
FROM NPSDashboard_Webhook_Data1_copy, 
UNNEST(REGEXP_EXTRACT_ALL(Comment, r'(\\u[abcdef0-9]{4})')) c 
) 

SELECT 
Comment, 
STRING_AGG(IFNULL(uchar, x), '' ORDER BY pos) Decoded 
FROM (
SELECT 
Comment, 
pos, 
SUBSTR(Comment, 
SUM(CASE char WHEN '' THEN 1 ELSE 6 END) 
    OVER(PARTITION BY Comment ORDER BY pos) - CASE char WHEN '' THEN 0 ELSE 5 
    END, 
    CASE char WHEN '' THEN 1 ELSE 6 END) x, 
    uchar 
    FROM NPSDashboard_Webhook_Data1_copy, 
    UNNEST(REGEXP_EXTRACT_ALL(Comment, r'(\\u[abcdef0-9]{4})|.')) char WITH OFFSET AS pos 
    LEFT JOIN uchars u ON u.c = char 
) 
    GROUP BY Comment 

의 반환 오류 : - : 유효하지 않은 코드 포인트 난 그 "\ ud83c \ udf38"의 반환 오류를 발견 55,357

  • 쿼리

  • 실패 오류 이모티콘 반환 오류에서 "벚꽃"입니다. 이 문제를 해결하는 정규식 또는 변환기를 수행하는 방법?

답변

0

순수 SQL에서는이 작업을 수행 할 수 없다고 생각합니다.

UTF-16 이모티를 HTML 엔터티 (16 진수)로 변환하여 DB에 저장하는 것이 좋습니다. 대부분의 아마 당신은 그렇게 할 프로그래밍 언어를 활용해야합니다 (ref를)

는 .NET

using System; 
using System.Text; 
using System.Globalization; 
using System.Net; 

public class Program 
{ 
    public static void Main() 
    { 

     Console.WriteLine(WebUtility.HtmlEncode("\uD83D\uDE02")); 
    } 
} 

이처럼 시도하거나 당신이 자바에서 이것에 대한 emoji4j 라이브러리를 사용할 수 있습니다 :

String line = "Hi , i am fine \uD83D\uDE02 \uD83D\uDE02, how r u ?"; 
EmojiUtils.hexHtmlify(line); //Hi , i am fine 😂 😂, how r u ?