- wszystkie funkcje akceptujące argumenty
STRING
akceptują również typyVARCHAR
iCHAR
wprowadzone w Impala 2.0. - ilekroć wartości
VARCHAR
lubCHAR
są przekazywane do funkcji, która zwraca wartość łańcuchową, typ zwracany jest znormalizowany doSTRING
. Na przykład wywołanieconcat()
z kombinacją argumentówSTRING
,VARCHAR
iCHAR
daje wynikSTRING
.
odniesienie do funkcji:
Impala obsługuje następujące funkcje łańcuchowe:
- ASCII
- BASE64DECODE
- BASE64ENCODE
- BTRIM
- CHAR_LENGTH
- CHR
- CONCAT
- CONCAT_WS
- FIND_IN_SET
- GROUP_CONCAT
- INITCAP
- INSTR
- JARO_DISTANCE, JARO_DIST
- JARO_SIMILARITY, JARO_SIM
- JARO_WINKER_DISTANCE, JW_DST
- JARO_WINKER_DISTANCE, JW_SIM
- LEFT
- LENGTH
- LEVENSHTEIN, LE_DST
- LOCATE
- LOWER, LCASE
- LPAD
- LTRI
- PARSE_URL
- REGEXP_ESCAPE
- REGEXP_EXTRACT
- REGEXP_LIKE
- REGEXP_REPLACE
- REPEAT
- REPLACE
- REVERSE
- RIGHT
- RPAD
- RTRIM
- SPLIT_PART
- STRLEFT
- STRRIGHT
- SUBSTR, substring
- Translate
- trim
- Upper, UCASE
ASCII(string str) cel: zwraca numeryczny kod ASCII pierwszego znaku argumentu.
Typ powrotu: INT
BASE64DECODE(STRING str) cel:
Typ powrotu: STRING
uwagi dotyczące użycia:
funkcje BASE64ENCODE()
i BASE64DECODE()
są zwykle używane w połączeniu, do przechowywania w tabeli Impala danych ciągów, które są problematyczne do przechowywania lub przesyłania. Można na przykład użyć tych funkcji do przechowywania danych ciągów znaków, które używają kodowania innego niż UTF-8, lub do przekształcania wartości w kontekstach, które wymagają wartości ASCII, na przykład dla kolumn klucza partycji. Należy pamiętać, że wartości zakodowane w base64 dają różne wyniki dla funkcji łańcuchowych, takich jak LENGTH()
, MAX()
i MIN()
, niż gdy te funkcje są wywoływane z niezakodowanymi wartościami łańcuchowymi.
wszystkie wartości zwracane przez BASE64ENCODE()
są wielokrotnością długości 4 bajtów. Wszystkie wartości argumentów dostarczone do BASE64DECODE()
muszą być również wielokrotnością długości 4 bajtów. Jeśli wartość zakodowana w base64 miałaby inną długość, może być wypełniona końcowymi znakami =
, aby osiągnąć długość będącą wielokrotnością 4 bajtów.
jeśli argument string to BASE64DECODE()
nie reprezentuje poprawnej wartości zakodowanej w base64, z zastrzeżeniem ograniczeń implementacji Impala, takich jak dozwolony zestaw znaków, funkcja zwraca NULL
.
przykłady:
BASE64ENCODE (STRING str) cel:
Typ powrotu: STRING
uwagi dotyczące użycia:
funkcje BASE64ENCODE()
i BASE64DECODE()
są zwykle używane w połączeniu, do przechowywania w tabeli Impala danych ciągów, które są problematyczne do przechowywania lub przesyłania. Można na przykład użyć tych funkcji do przechowywania danych ciągów znaków, które używają kodowania innego niż UTF-8, lub do przekształcania wartości w kontekstach, które wymagają wartości ASCII, na przykład dla kolumn klucza partycji. Należy pamiętać, że wartości zakodowane w base64 dają różne wyniki dla funkcji łańcuchowych, takich jak LENGTH()
, MAX()
i MIN()
, niż gdy te funkcje są wywoływane z niezakodowanymi wartościami łańcuchowymi.
wszystkie wartości zwracane przez BASE64ENCODE()
są wielokrotnością długości 4 bajtów. Wszystkie wartości argumentów dostarczone do BASE64DECODE()
muszą być również wielokrotnością długości 4 bajtów. Jeśli wartość zakodowana w base64 miałaby inną długość, może być wypełniona końcowymi znakami =
, aby osiągnąć długość będącą wielokrotnością 4 bajtów.
przykłady:
BTRIM(STRING a), BTRIM(STRING a, STRING chars_to_trim) cel: usuwa wszystkie wystąpienia jednego lub więcej znaków z początku i końca wartościSTRING
. Domyślnie usuwa tylko spacje. Jeśli podany jest inny niżNULL
opcjonalny drugi argument, funkcja usuwa wszystkie wystąpienia znaków w tym drugim argumencie z początku i końca łańcucha.
Typ powrotu: STRING
przykłady:
poniższe przykłady pokazują domyślne zachowanie btrim()
i to, co się zmienia po podaniu opcjonalnego drugiego argumentu. Wszystkie przykłady zawierają wartość wyjściową z wartością , dzięki czemu w wyniku
btrim()
można zobaczyć wszelkie spacje prowadzące lub końcowe. Domyślnie funkcja usuwa i ilość zarówno początkowych, jak i końcowych spacji. Gdy podany jest drugi argument, każda liczba wystąpień dowolnego znaku w drugim argumencie jest usuwana z początku i końca ciągu wejściowego; w tym przypadku spacje nie są usuwane (chyba że są częścią drugiego argumentu) i żadne instancje znaków nie są usuwane, jeśli nie znajdują się bezpośrednio na początku lub na końcu łańcucha.
CHAR_LENGTH(STRING a), CHARACTER_LENGTH (STRING a) cel: zwraca długość w znakach łańcucha argumentu. Aliasy dla funkcjilength()
.
Typ zwrotu: INT
Chr(int character_code) cel: Zwraca znak określony przez wartość dziesiętną punktu kodu. Interpretacja i wyświetlanie wynikowego znaku zależy od ustawień regionalnych systemu. Ponieważ spójne przetwarzanie wartości ciągu znaków Impala jest gwarantowane tylko dla wartości w zakresie ASCII, należy używać tej funkcji tylko dla wartości odpowiadających znakom ASCII. W szczególności wartości parametrów większe niż 255 zwracają pusty łańcuch.
Typ powrotu: STRING
uwagi dotyczące użycia: może być używany jako odwrotność funkcji ascii()
, która konwertuje znak na jego numeryczny kod ASCII.
przykłady:
SELECT chr(65);+---------+| chr(65) |+---------+| A |+---------+SELECT chr(97);+---------+| chr(97) |+---------+| a |+---------+
CONCAT(STRING A, STRING B…) Purpose: Zwraca pojedynczy łańcuch reprezentujący wszystkie wartości argumentów połączone razem.
jeśli jakikolwiek argument to NULL
, funkcja zwraca NULL
.
Typ powrotu: STRING
uwagi dotyczące użycia: concat()
i concat_ws()
są odpowiednie do łączenia wartości wielu kolumn w tym samym wierszu, podczas gdy group_concat()
łączy wartości z różnych wierszy.
CONCAT_WS (STRING sep, STRING A, STRING B…) Cel: Zwraca pojedynczy łańcuch reprezentujący połączone wartości drugiego i następnego argumentu, rozdzielony określonym separatorem.
jeśli jakikolwiek argument to NULL
, funkcja zwraca NULL
.
Typ powrotu: STRING
uwagi dotyczące użytkowania: concat()
i concat_ws()
są odpowiednie do łączenia wartości wielu kolumn w tym samym wierszu, podczas gdy group_concat()
łączy ze sobą wartości z różnych wierszy.
FIND_IN_SET(STRING str, STRING strList) cel: Zwraca pozycję (począwszy od 1) pierwszego wystąpienia określonego łańcucha w ciągu oddzielonym przecinkami. ZwracaNULL
, jeśli któryś z argumentów jestNULL
, 0, jeśli szukany ciąg nie został znaleziony lub 0, jeśli szukany ciąg zawiera przecinek.
Typ zwrotu: INT
GROUP_CONCAT (STRING S ) cel: Zwraca pojedynczy łańcuch reprezentujący wartość argumentu połączoną ze sobą dla każdego wiersza zbioru wyników. Jeśli podany jest opcjonalny łańcuch separatora, separator jest dodawany między każdą parą połączonych wartości.
Typ powrotu: STRING
uwagi dotyczące użycia: concat()
i concat_ws()
są odpowiednie do łączenia wartości wielu kolumn w tym samym wierszu, podczas gdy group_concat()
łączy wartości z różnych wierszy.
domyślnie Zwraca pojedynczy łańcuch obejmujący cały zestaw wyników. Aby uwzględnić inne kolumny lub wartości w zestawie wynikowym lub utworzyć wiele połączonych łańcuchów dla podzbiorów wierszy, dołącz do zapytania klauzulę GROUP BY
.
ściśle mówiąc, group_concat()
jest funkcją agregującą, a nie skalarną, jak inne na tej liście. Więcej szczegółów i przykładów można znaleźć w funkcji GROUP_CONCAT
.
Initcap(STRING str) cel: zwraca łańcuch wejściowy z pierwszą literą każdego słowa pisaną wielką literą i wszystkimi innymi literami małymi literami.
Typ powrotu: STRING
przykład:
INITCAP("i gOt mY ChiCkeNs in tHe yard.")
zwraca "I Got My Chickens In The Yard."
.
INSTR(STRING str, STRING substr ]) cel: Zwraca pozycję (począwszy od 1) pierwszego wystąpienia podłańcucha w dłuższym łańcuchu.
Typ powrotu: INT
uwagi dotyczące użycia:
jeśli w str nie ma podstr, funkcja zwraca 0.
opcjonalne argumenty trzeci i czwarty pozwalają znaleźć instancje substr inne niż pierwsza instancja, zaczynając od lewej.
JARO_DISTANCE (STRING str1, STRING str2)JARO_DST (STRING str1, STRING str2) cel: zwraca odległość Jaro między dwoma wejściowymi łańcuchami. Odległość Jaro jest miarą podobieństwa między dwoma ciągami i jest komplementarnością
JARO_SIMILARITY()
, czyli (1 –JARO_SIMILARITY()
).
Typ powrotu: DOUBLE
uwagi dotyczące użycia:
jeśli dwa ciągi wejściowe są identyczne, funkcja zwraca 0.0.
jeśli nie ma pasującego znaku między wejściowymi łańcuchami, funkcja zwraca 1.0.
jeśli którykolwiek z ciągów wejściowych jest NULL
, funkcja zwraca NULL
.
jeśli długość jednego z łańcuchów wejściowych jest większa niż 255 znaków, funkcja zwraca błąd.
JARO_SIMILARITY(STRING str1, STRING str2) JARO_SIM(STRING str1, STRING str2) Purpose: zwraca podobieństwo Jaro dwóch łańcuchów. Im wyższe jest podobieństwo Jaro dla dwóch strun, tym bardziej podobne są struny.
Typ powrotu: DOUBLE
uwagi dotyczące użycia:
jeśli dwa ciągi wejściowe są identyczne, funkcja zwraca 1.0.
jeśli nie ma pasującego znaku między wejściowymi łańcuchami, funkcja zwraca 0.0.
jeśli którykolwiek z ciągów wejściowych jest NULL
, funkcja zwraca NULL
.
jeśli długość jednego z łańcuchów wejściowych jest większa niż 255 znaków, funkcja zwraca błąd.
JARO_WINKLER_DISTANCE (STRING str1, STRING str2) Jw_dst (STRING str1, STRING str2) Purpose: zwraca odległość Jaro-Winklera dwóch wejściowych łańcuchów. Jest dopełnieniemJARO_WINKLER_SIMILARITY()
, tj. 1 –JARO_WINKLER_SIMILARITY()
.
Typ powrotu: DOUBLE
uwagi dotyczące użycia:
jeśli dwa ciągi wejściowe są identyczne, funkcja zwraca 0.0.
jeśli nie ma pasującego znaku między wejściowymi łańcuchami, funkcja zwraca 1.0.
- długość jednego z łańcuchów wejściowych jest większa niż 255 znaków.
- scaling_factor < 0.0 lub scaling_factor > 0.25
- boost_threshold < 0.0 lub boost_threshold > 1.0
jeśli którykolwiek z łańcuchów wejściowych wynosi NULL
, funkcja zwraca NULL
.
domyślnym współczynnikiem skalowania jest 0,1.
waga prefiksu zostanie zastosowana tylko wtedy, gdy Jaro-distance przekroczy opcjonalny boost_threshold. Domyślnie wartość boost_threshold wynosi 0.7.
JARO_WINKLER_SIMILARITY(STRING str1, STRING str2) JARO_SIM(STRING str1, STRING str2) Purpose: zwraca podobieństwo Jaro-Winklera między dwoma wejściowymi łańcuchami. Podobieństwo Jaro-Winklera wykorzystuje wagę prefiksu, określoną przez współczynnik skalowania, co daje korzystniejsze oceny ciągom, które pasują Od początku do ustawionej długości prefiksu, maksymalnie do czterech znaków.
Użyj funkcji Jaro lub Jaro-Winklera do wykonywania rozmytych dopasowań na stosunkowo krótkich łańcuchach, np. do szorowania danych wejściowych użytkownika z nazwami z rekordami w bazie danych.
Typ powrotu: DOUBLE
uwagi dotyczące użycia:
jeśli dwa ciągi wejściowe są identyczne, funkcja zwraca 1.0.
jeśli nie ma pasującego znaku między wejściowymi łańcuchami, funkcja zwraca 0.0.
- długość jednego z łańcuchów wejściowych jest większa niż 255 znaków.
- scaling_factor < 0.0 lub scaling_factor > 0.25
- boost_threshold < 0.0 lub boost_threshold > 1.0
jeśli którykolwiek z łańcuchów wejściowych wynosi NULL
, funkcja zwraca NULL
.
domyślnym współczynnikiem skalowania jest 0,1.
waga prefiksu zostanie zastosowana tylko wtedy, gdy podobieństwo Jaro przekroczy opcjonalny boost_threshold. Domyślnie wartość boost_threshold wynosi 0.7.
LEFT (STRING A, INT num_chars) Patrz funkcjaSTRLEFT()
. LENGTH (STRING a) Purpose: zwraca długość w znakach łańcucha argumentu.
Typ zwracania: INT
LEVENSHTEIN(STRING str1, STRING str2), LE_DST(STRING str1, STRING str2) przeznaczenie: zwraca odległość Levenshteina między dwoma wejściowymi łańcuchami. Odległość Levenshteina między dwoma łańcuchami to minimalna liczba jednoznakowych edycji wymaganych do przekształcenia jednego łańcucha w drugi. Funkcja wskazuje, jak różne są ciągi wejściowe.
Typ zwracania: INT
uwagi dotyczące użycia:
jeśli ciągi wejściowe są równe, funkcja zwraca 0.
jeśli którekolwiek z wejść przekracza 255 znaków, funkcja zwraca błąd.
jeśli którekolwiek z wejściowych łańcuchów jest NULL
, funkcja zwraca NULL
.
jeśli długość jednego łańcucha wejściowego wynosi zero, funkcja zwraca długość drugiego łańcucha.
przykład:
LEVENSHTEIN ('welcome', 'We come')
zwraca 2, najpierw zmień na „w
” na ” W
„, a następnie zamień „l
” na znak spacji.
LOCATE(STRING substr, STRING str) cel: Zwraca pozycję (począwszy od 1) pierwszego wystąpienia podłańcucha w dłuższym łańcuchu, opcjonalnie po określonej pozycji.
Typ zwrotu: INT
LOWER(STRING a), LCASE(STRING a) cel: zwraca łańcuch argumentu skonwertowany na wszystkie małe litery.
Typ powrotu: STRING
uwagi dotyczące użycia:
w Impala 2.5 i wyższe, możesz uprościć zapytania, które używają wielu wywołań UPPER()
i LOWER()
do porównywania wielkości liter, używając operatorów ILIKE
lub IREGEXP
.
lpad(STRING str, INT len, STRING pad) cel: zwraca łańcuch o określonej długości, oparty na pierwszym argumencie string. Jeśli podany ciąg znaków jest zbyt krótki, jest on wypełniany po lewej stronie powtarzającą się sekwencją znaków z łańcucha padów. Jeśli podany łańcuch jest zbyt długi, jest obcinany po prawej stronie.
Typ zwrotu: STRING
LTRIM (STRING a ) cel: Zwraca łańcuch argumentu ze wszystkimi wystąpieniami znaków określonymi przez drugi argument usuniętymi z lewej strony. Usuwa spacje, jeśli drugi argument nie jest podany.
Return type: STRING
PARSE_URL(STRING urlString, STRING partToExtract ) Purpose: Zwraca część adresu URL odpowiadającą podanej części. Argument part może być'PROTOCOL'
,'HOST'
,'PATH'
,'REF'
,'AUTHORITY'
,'FILE'
,'USERINFO'
, lub'QUERY'
Duże litery są wymagane dla tych wartości literalnych. Gdy żądasz częściQUERY
adresu URL, możesz opcjonalnie określić klucz, aby pobrać tylko powiązaną wartość z par klucz-wartość w ciągu zapytania.
Typ powrotu: STRING
uwagi dotyczące użycia: Ta funkcja jest ważna dla tradycyjnego przypadku użycia Hadoop do interpretacji dzienników internetowych. Na przykład, jeśli dane o ruchu sieciowym zawierają surowe adresy URL nie podzielone na osobne kolumny tabeli, można policzyć odwiedzających daną stronę, wyodrębniając pole 'PATH'
lub 'FILE'
lub analizując wyszukiwane hasła, wyodrębniając odpowiedni klucz z pola 'QUERY'
.
REGEXP_ESCAPE(STRING source) przeznaczenie: funkcjaREGEXP_ESCAPE
zwraca ciąg znaków poprzedzających znak specjalny w bibliotece RE2, tak że znaki specjalne są interpretowane dosłownie, a nie jako znaki specjalne. Następujące znaki specjalne są unikane przez funkcję:
.\+*?$(){}=!<>|:-
Typ zwracania: string
w Impala 2.0 i nowszych, składnia wyrażenia regularnego Impala jest zgodna ze składnią rozszerzonego wyrażenia regularnego POSIX używaną przez Bibliotekę Google RE2. Szczegółowe informacje można znaleźć w dokumentacji RE2. Ma większość idiomów znanych z wyrażeń regularnych w Perlu, Pythonie i tak dalej, w tym .*?
dla nie chciwych meczów.
w impali 2.0 i nowszych, zmiana w podstawowej bibliotece wyrażeń regularnych może spowodować zmiany w sposobie interpretacji wyrażeń regularnych przez tę funkcję. Przetestuj wszelkie zapytania, które używają wyrażeń regularnych i dostosuj wzorce wyrażeń, jeśli to konieczne.
ponieważ interpreter Impala-shell używa znaku \
do ucieczki, użyj \
do reprezentowania znaku ucieczki wyrażenia regularnego we wszystkich wyrażeniach regularnych przesyłanych przez Impala-shell . Być może wolisz używać równoważnych nazw klas znaków, takich jak ]
zamiast \d
, które trzeba by zakończyć jako \d
.
przykłady:
ten przykład pokazuje unikanie jednego ze znaków specjalnych w RE2.
+------------------------------------------------------+| regexp_escape('Hello.world') |+------------------------------------------------------+| Hello\.world |+------------------------------------------------------+
ten przykład pokazuje wszystkie znaki specjalne w RE2.
+------------------------------------------------------------+| regexp_escape('a.b\c+d*e?fh$i(j)k{l}m=n!o<p>q|r:s-t') |+------------------------------------------------------------+| a\.b\c\+d\*e\?f\h$i\(j\)k\{l\}m\=n\!o\<p\>q\|r\:s\-t |+------------------------------------------------------------+
REGEXP_EXTRACT(STRING subject, STRING pattern, int index) Purpose: Zwraca określoną () grupę z łańcucha na podstawie wzorca wyrażenia regularnego. Grupa 0 odnosi się do całego wyodrębnionego łańcucha, podczas gdy grupa 1, 2 itd.odnosi się do pierwszej, drugiej i tak dalej(...)
części.
Typ powrotu: STRING
w Impala 2.0 i nowszych, składnia wyrażenia regularnego Impala jest zgodna ze składnią rozszerzonego wyrażenia regularnego POSIX używaną przez Bibliotekę Google RE2. Szczegółowe informacje można znaleźć w dokumentacji RE2. Ma większość idiomów znanych z wyrażeń regularnych w Perlu, Pythonie i tak dalej, w tym .*?
dla nie chciwych meczów.
w impali 2.0 i nowszych, zmiana w podstawowej bibliotece wyrażeń regularnych może spowodować zmiany w sposobie interpretacji wyrażeń regularnych przez tę funkcję. Przetestuj wszelkie zapytania, które używają wyrażeń regularnych i dostosuj wzorce wyrażeń, jeśli to konieczne.
ponieważ interpreter Impala-shell używa znaku \
do ucieczki, użyj \
do reprezentowania znaku ucieczki wyrażenia regularnego we wszystkich wyrażeniach regularnych przesyłanych przez Impala-shell . Być może wolisz używać równoważnych nazw klas znaków, takich jak ]
zamiast \d
, które trzeba by zakończyć jako \d
.
przykłady:
ten przykład pokazuje, jak grupa 0 pasuje do pełnego ciągu wzorca, w tym do części spoza dowolnej grupy ()
:
ten przykład pokazuje, jak Grupa 1 dopasowuje tylko zawartość pierwszej grupy ()
w łańcuchu wzorców:
w przeciwieństwie do wcześniejszych wydań impali, biblioteka wyrażeń regularnych używana w impali 2.0 i późniejszych obsługuje idiom .*?
dla nie chciwych dopasowań. Ten przykład pokazuje, jak łańcuch wzorca zaczynający się od .*?
pasuje do najkrótszej możliwej części łańcucha źródłowego, zwracając po prawej stronie zestaw małych liter. Łańcuch wzorca zaczynający się i kończący na .*?
znajduje dwa potencjalne dopasowania o jednakowej długości i zwraca pierwszą znalezioną (pierwszy z lewej zestaw małych liter).
REGEXP_LIKE(STRING source, STRING pattern) cel: zwracatrue
lubfalse
, aby wskazać, czy łańcuch źródłowy zawiera w sobie Wyrażenie regularne podane przez wzorzec. Opcjonalny trzeci argument składa się z znaczników literowych, które zmieniają sposób dopasowania, takich jak
i
dla dopasowania bez rozróżniania wielkości liter.
składnia:
flagi, które możesz uwzględnić w opcjonalnym trzecim argumencie to:
-
c
: dopasowanie uwzględniające wielkość liter (domyślnie). -
i
: dopasowanie niewrażliwe na wielkość liter. Jeśli w trzecim argumencie znajduje się wiele wystąpieńc
ii
, ostatnia taka opcja ma pierwszeństwo. -
m
: dopasowanie wieloliniowe. Operatory^
i$
pasują do początku lub końca dowolnej linii w łańcuchu źródłowym, a nie do początku i końca całego łańcucha. -
n
: dopasowanie nowej linii. Operator.
może dopasować znak nowej linii. Operator powtarzania, taki jak.*
, może dopasować część łańcucha źródłowego, która obejmuje wiele linii.
Typ powrotu: BOOLEAN
w Impala 2.0 i nowszych, składnia wyrażenia regularnego Impala jest zgodna ze składnią rozszerzonego wyrażenia regularnego POSIX używaną przez Bibliotekę Google RE2. Szczegółowe informacje można znaleźć w dokumentacji RE2. Ma większość idiomów znanych z wyrażeń regularnych w Perlu, Pythonie i tak dalej, w tym .*?
dla nie chciwych meczów.
W Impali 2.0 i późniejsze zmiany w podstawowej bibliotece wyrażeń regularnych mogą spowodować zmiany w sposobie interpretacji wyrażeń regularnych przez tę funkcję. Przetestuj wszelkie zapytania, które używają wyrażeń regularnych i dostosuj wzorce wyrażeń, jeśli to konieczne.
ponieważ interpreter Impala-shell używa znaku \
do ucieczki, użyj \
do reprezentowania znaku ucieczki wyrażenia regularnego we wszystkich wyrażeniach regularnych przesyłanych przez Impala-shell . Być może wolisz używać równoważnych nazw klas znaków, takich jak ]
zamiast \d
, które trzeba by zakończyć jako \d
.
przykłady:
ten przykład pokazuje, w jaki sposób REGEXP_LIKE()
może testować istnienie różnych rodzajów wzorców wyrażeń regularnych w łańcuchu źródłowym:
REGEXP_REPLACE(string initial, STRING pattern, STRING replacement) cel: zwraca początkowy argument z wzorcem wyrażenia regularnego zastąpionym przez łańcuch końcowy argumentu.
Typ powrotu: STRING
w impali 2.0 i nowsze składnia wyrażenia regularnego Impala jest zgodna ze składnią rozszerzonego wyrażenia regularnego POSIX używaną przez Bibliotekę Google RE2. Szczegółowe informacje można znaleźć w dokumentacji RE2. Ma większość idiomów znanych z wyrażeń regularnych w Perlu, Pythonie i tak dalej, w tym .*?
dla nie chciwych meczów.
w impali 2.0 i nowszych, zmiana w podstawowej bibliotece wyrażeń regularnych może spowodować zmiany w sposobie interpretacji wyrażeń regularnych przez tę funkcję. Przetestuj wszelkie zapytania, które używają wyrażeń regularnych i dostosuj wzorce wyrażeń, jeśli to konieczne.
ponieważ interpreter Impala-shell używa znaku \
do ucieczki, użyj \
do reprezentowania znaku ucieczki wyrażenia regularnego we wszystkich wyrażeniach regularnych przesyłanych przez Impala-shell . Być może wolisz używać równoważnych nazw klas znaków, takich jak ]
zamiast \d
, które trzeba by zakończyć jako \d
.
przykłady:
te przykłady pokazują, jak można zastąpić Części ciągu pasujące do wzorca tekstem zastępczym, który może zawierać backreferencje do dowolnych grup ()
w łańcuchu wzorca. Liczba referencji wstecznych zaczyna się od 1, a wszystkie znaki \
muszą być poprzedzone znakiem \
.
Zastąp wzorzec znaków nowym tekstem:
> select regexp_replace('aaabbbaaa','b+','xyz');+------------------------------------------+| regexp_replace('aaabbbaaa', 'b+', 'xyz') |+------------------------------------------+| aaaxyzaaa |+------------------------------------------+Returned 1 row(s) in 0.11s
Zastąp wzorzec znaków tekstem zastępczym zawierającym oryginalny pasujący tekst:
> select regexp_replace('aaabbbaaa','(b+)','<\1>');+----------------------------------------------+| regexp_replace('aaabbbaaa', '(b+)', '<\1>') |+----------------------------------------------+| aaa<bbb>aaa |+----------------------------------------------+Returned 1 row(s) in 0.11s
Usuń wszystkie znaki, które nie są cyframi:
REPEAT (STRING str, INT N) cel: zwraca łańcuch argumentu powtórzony określoną liczbę razy.
Typ zwrotu: STRING
REPLACE (string initial, STRING target, STRING replacement) cel: Zwraca początkowy argument ze wszystkimi wystąpieniami łańcucha docelowego zastąpionego przez łańcuch zastępczy.
Typ powrotu: STRING
uwagi dotyczące użycia:
ponieważ ta funkcja nie używa żadnych wzorców wyrażeń regularnych, zwykle jest szybsza niż REGEXP_REPLACE()
dla prostych podstawień łańcuchów.
jeśli jakikolwiek argument to NULL
, zwracana wartość to NULL
.
w dopasowaniu rozróżniana jest wielkość liter.
jeśli zastępczy łańcuch zawiera inną instancję docelowego łańcucha, rozszerzenie jest wykonywane tylko raz, zamiast zastosować ponownie do nowo zbudowanego łańcucha.
przykłady:
REVERSE(STRING a) cel: zwraca łańcuch argumentu ze znakami w kolejności odwróconej.
Typ zwracania: STRING
RIGHT(STRING A, INT num_chars) Patrz funkcjaSTRRIGHT
. Rpad (STRING str, INT len, STRING pad) Purpose: zwraca łańcuch o określonej długości, oparty na pierwszym argumencie string. Jeśli podany ciąg znaków jest zbyt krótki, jest on wypełniany po prawej stronie powtarzającą się sekwencją znaków z łańcucha padów. Jeśli podany łańcuch jest zbyt długi, jest obcinany po prawej stronie.
Typ zwrotu: STRING
RTRIM(STRING a ) cel: zwraca łańcuch argumentu ze wszystkimi wystąpieniami znaków określonymi przez drugi argument usuniętymi z prawej strony. Usuwa spacje, jeśli drugi argument nie jest podany.
Return type: STRING
SPACE(int N) Purpose: zwraca skonkatenowany łańcuch o podanej liczbie spacji.repeat(' ',n)
Typ powrotu: STRING
SPLIT_PART(STRING source, STRING delimiter, bigint index) cel: zwraca żądanąindex
część wejściowego łańcucha źródłowego podzielonego przez separator.
- jeśli indeks jest liczbą dodatnią, zwraca część indeksu od lewej w łańcuchu źródłowym.
- jeśli indeks jest liczbą ujemną, zwraca część indeksu z prawej strony w łańcuchu źródłowym.
- jeśli indeks wynosi 0, zwraca błąd.
separator może składać się z wielu znaków, a nie tylko jednego znaku.
wszystkie dopasowania ogranicznika są wykonywane dokładnie, nie używając żadnych wzorców wyrażeń regularnych.
Typ powrotu: STRING
przykłady:
SPLIT_PART('x,y,z',',',2)
zwraca 'y'
.
SPLIT_PART('one***two***three','***',2)
zwraca 'two'
.
SPLIT_PART('[email protected]@[email protected]@ghi', '@@', 3)
zwraca 'ghi'
.
SPLIT_PART('[email protected]@[email protected]@ghi', '@@', -3)
zwraca 'abc'
.
STRLEFT(STRING a, int num_chars) Purpose: zwraca lewe znaki łańcucha. Skrót dla wywołaniasubstr()
z 2 argumentami.
Return type: STRING
STRRIGHT(STRING A, int num_chars) Purpose: zwraca prawe znaki łańcucha. Skrót dla wywołaniasubstr()
z 2 argumentami.
Typ zwracania: STRING
SUBSTR(STRING a, int start ), SUBSTRING(STRING A, int start ) cel: Zwraca część łańcucha rozpoczynającą się w określonym punkcie, opcjonalnie o określonej maksymalnej długości. Znaki w łańcuchu są indeksowane od 1.
Typ zwrotu: STRING
TRANSLATE(STRING input, STRING from, STRING to) cel: zwraca ciąginput
z każdym znakiem w argumenciefrom
zastąpionym odpowiednim znakiem w argumencieto
. Znaki są dopasowane w kolejności, w jakiej występują wfrom
ito
.
na przykład: translate ('hello world','world','earth')
zwraca 'hetta earth'
.
Typ powrotu: STRING
uwagi dotyczące użycia:
jeśli from
zawiera więcej znaków niż to
, znaki from
, które są poza długością to
, są usuwane w wyniku.
na przykład:
translate('abcdedg', 'bcd', '1')
zwraca 'a1eg'
.
translate('Unit Number#2', '# ', '_')
zwraca 'UnitNumber_2'
.
jeśli from
jest NULL
, funkcja zwraca NULL
.
jeśli to
zawiera więcej znaków niż from
, Dodatkowe znaki w to
są ignorowane.
jeśli from
zawiera zduplikowane znaki, zduplikowany znak jest zastępowany pierwszym pasującym znakiem w to
.
na przykład: translate ('hello','ll','67')
zwraca 'he66o'
.
TRIM(STRING a) przeznaczenie: zwraca łańcuch wejściowy z usuniętymi spacjami początkowymi i końcowymi. Tak samo jak przekazywanie łańcucha przezLTRIM()
iRTRIM()
.
uwagi dotyczące użycia: często używane podczas operacji czyszczenia danych podczas cyklu ETL, jeśli wartości wejściowe mogą nadal mieć otaczające przestrzenie. Aby uzyskać bardziej ogólną funkcję, która może usuwać inne znaki początkowe i końcowe poza spacjami, zobacz BTRIM()
.
Typ zwrotu: STRING
UPPER(STRING a), UCASE(STRING a) cel: zwraca łańcuch argumentu skonwertowany na wielkie litery.
Typ powrotu: STRING
uwagi dotyczące użycia:
w impali 2.5 i nowszych, możesz uprościć zapytania, które używają wielu wywołań UPPER()
i LOWER()
do porównywania wielkości liter, używając operatorów ILIKE
lub IREGEXP
.