2016-05-30 8 views
1

Gibt es eine Version davon in BigQuery?CHAR() oder ASCII() Funktion in BigQuery?

Grundsätzlich muss ich einen BASE64-Buchstaben nehmen und es konsequent in einen numerischen Wert umwandeln (zu BASE64-Index oder zu ASCII - kein Unterschied für mich).

Bis jetzt habe ich 2 Optionen erfunden: - UDF - zu verwenden, um eine Tabelle mit allen 64 Buchstaben und Indizes zu verbinden.

Aber beide Lösungen sehen ein bisschen zu kompliziert für die Aufgabe. Gibt es einen besseren Weg?

+0

Können Sie Ihre Erfindungen zeigen? Es ist also klarer, was Sie erreichen wollen. Es wäre auch schön zu sehen, warum du das brauchst - es gibt immer einen anderen Weg, etwas einfacher zu machen! –

Antwort

3

Eine weitere Option Brief an seine ASCII mit BigQuery zu konvertieren:

SELECT 
    char, 
    INSTR('@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz', char) 
    + 63 AS ascii 
FROM 
    (SELECT 'A' AS char), 
    (SELECT 'H' AS char), 
    (SELECT 'a' AS char), 
    (SELECT 'h' AS char) 
+0

Wow, das ist brilliant! Vielen Dank! Ich versuche, "Benutzer" in zwei oder mehr Gruppen zufällig zu teilen. Benutzer-IDs sind einzigartig, aber nicht wirklich zufällig, also wollte ich zuerst SHA1 (user_id) machen, dann den ersten Buchstaben nehmen, in Zahl umwandeln und Mod 2 nehmen. Könnte HASH() natürlich verwenden, aber ich muss dasselbe tun ein anderer Ort (und in Ruby), und ich konnte nicht die gleichen CityHash Ergebnisse dort, lesen Sie auch hier Konsistenz ist nicht garantiert - http://StackOverflow.com/Questions/13861380/consistency-of-hash-Funktion –

+0

froh, dass es geholfen: o) –

0

Es ist die äquivalent eine ASCII-Funktion in BigQuery, aber Sie müssen es von to_code_points() konstruieren:

select to_code_points(substr(x, 1, 1))[offset(0)] 

to_code_points gibt die Zeichensatzwerte für eine Zeichenfolge als Array zurück. Dieses Konstrukt übernimmt das erste Zeichen einer Zeichenfolge, ruft die Werte in einem Array ab und gibt dann den ersten Wert im Array zurück - Voila! ASCII().