在列中找到值
Locate value in column
我正在将 Elastic Load Balancing 访问日志传递给 Athena,我想获取位于 URL 列中的值。以下适用于 mySQL 但 Athena 使用 SQL 有没有办法从下面获取县的值?
create table elb_logs(row varchar(100), url varchar(100));
insert into elb_logs values("Row1", "Lauguage=English&Country=USA&Gender=Male");
insert into elb_logs values("Row2", "Gender=Female&Language=French&Country=");
insert into elb_logs values("Row3", "Country=Canada&Gender=&Language=English");
insert into elb_logs values("Row4", "Gender=&Language=English");
SELECT `row`, IF(LOCATE('Country=', url)>0,
COALESCE(
NULLIF(SUBSTRING_INDEX(SUBSTRING_INDEX(url, 'Country=', -1), '&', 1), ''),
'Blank string is not valid!'),
'Missing Country!') AS ColumnB
FROM `elb_logs`
+------+----------------------------+
| row | ColumnB |
+------+----------------------------+
| Row1 | USA |
| Row2 | Blank string is not valid! |
| Row3 | Canada |
| Row4 | Missing Country! |
+------+----------------------------+
SPLIT_PART
函数似乎可以在这里使用:
SELECT
row,
CASE WHEN POSITION('Country=' IN url) > 0
THEN SPLIT_PART(SPLIT_PART(url, 'Country=', 2), '&', 1)
ELSE 'Missing Country!' END AS ColumnB
FROM elb_log;
使用Cross Apply
SELECT row, CASE WHEN LEFT(T2.URL, charindex('&', T2.URL) - 1) = '' THEN 'Blank string is not valid!'
WHEN LEFT(T2.URL, charindex('&', T2.URL) - 1) LIKE '%=%' THEN 'Missing Country!'
ELSE LEFT(T2.URL, charindex('&', T2.URL) - 1) END AS Country
FROM elb_logs AS T
CROSS APPLY (SELECT STUFF(T.URL, 1, charindex('&Country', T.URL) + 8, '')+'&') as T2(URL);
我正在将 Elastic Load Balancing 访问日志传递给 Athena,我想获取位于 URL 列中的值。以下适用于 mySQL 但 Athena 使用 SQL 有没有办法从下面获取县的值?
create table elb_logs(row varchar(100), url varchar(100));
insert into elb_logs values("Row1", "Lauguage=English&Country=USA&Gender=Male");
insert into elb_logs values("Row2", "Gender=Female&Language=French&Country=");
insert into elb_logs values("Row3", "Country=Canada&Gender=&Language=English");
insert into elb_logs values("Row4", "Gender=&Language=English");
SELECT `row`, IF(LOCATE('Country=', url)>0,
COALESCE(
NULLIF(SUBSTRING_INDEX(SUBSTRING_INDEX(url, 'Country=', -1), '&', 1), ''),
'Blank string is not valid!'),
'Missing Country!') AS ColumnB
FROM `elb_logs`
+------+----------------------------+
| row | ColumnB |
+------+----------------------------+
| Row1 | USA |
| Row2 | Blank string is not valid! |
| Row3 | Canada |
| Row4 | Missing Country! |
+------+----------------------------+
SPLIT_PART
函数似乎可以在这里使用:
SELECT
row,
CASE WHEN POSITION('Country=' IN url) > 0
THEN SPLIT_PART(SPLIT_PART(url, 'Country=', 2), '&', 1)
ELSE 'Missing Country!' END AS ColumnB
FROM elb_log;
使用Cross Apply
SELECT row, CASE WHEN LEFT(T2.URL, charindex('&', T2.URL) - 1) = '' THEN 'Blank string is not valid!'
WHEN LEFT(T2.URL, charindex('&', T2.URL) - 1) LIKE '%=%' THEN 'Missing Country!'
ELSE LEFT(T2.URL, charindex('&', T2.URL) - 1) END AS Country
FROM elb_logs AS T
CROSS APPLY (SELECT STUFF(T.URL, 1, charindex('&Country', T.URL) + 8, '')+'&') as T2(URL);