2017-11-30 16 views
0

BigqueryでアンケートのWebフックデータを受け取ります。現地語のコメントは、ユニコードと特殊文字として取り込まれます。私はすでにUnicodeを現地の言語に変換し、特殊文字を避けるために正規表現を行う関数を書いています。ReGex for emoji - Unicode/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" その戻りエラーを検出しました55357

  • クエリが

  • エラーを失敗しました。これは絵文字の返信エラーで "Cherry Blossom"です。どのようにこの問題を解決する正規表現またはコンバータを行うには?

答えて

0

純粋なSQLではこれを行うことはできません。

UTF-16 Emojisを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")); 
    } 
} 

でこのようにそれを試してみてくださいそれとも、Javaでこれをemoji4jライブラリを使用することができます。

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