linux shell 中 for in
#!/bin/sh
for date in 20161025 20161027 20161028 20161102 20161103 20161104 20161105
do
echo "${date}"
done
Hive 的 join 用法
假設有tableA和tableB 兩張表,Table A是左邊的表,Table B是右邊的表。
其各有四條記錄,其中有兩條記錄是相同的,如下所示:
id name id name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
1. join or inner join
SELECT * FROM TableA INNER JOIN TableB
ON TableA.name = TableB.name
id name id name
-- ---- -- ----
1 Pirate 2 Pirate
3 Ninja 4 Ninja
產生的結果集中,是A和B的交集。
|
2. full outer join
SELECT * FROM TableA FULL OUTER JOIN TableB
ON TableA.name = TableB.name
id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader
Full outer join 產生A和B的並集。但是需要注意的是,對於沒有匹配的記錄,則會以null做爲值。
`
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null
id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader
產生A表和B表都沒有出現的數據集.
3. left join
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
Left outer join 產生表A的完全集,而B表中匹配的則有值,沒有匹配的則以null值取代。
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null
id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null
產生在A表中有而在B表中沒有的集合。
4. 連續join。。。on。。。
幾個表之間關鍵字的連續join,得到需要查找的交叉信息。
select t1.deviceid as deviceid ,t3.site_telephone as telephone ,t4.*
from
DB1.table1 t1
join DB2. table2 t2 on (t1.deviceid = t2.deviceid)
join DB3.table3 t3 on (t2.mobile=t3.telephone)
join DB1.table4 t4 on (t3.user_no=t4.user_id);
正則表達式函數regexp_extract
其中的index,是按照正則字符串()的位置
1. 語法: regexp_extract(string subject, string pattern, int index)
2. 返回值: string
3. 說明:將字符串subject按照pattern正則表達式的規則拆分,返回index指定的字符。注意,在有些情況下要使用轉義字符
4. 舉例:
5. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from dual;
6. the
7. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) from dual;
8. bar
9. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual;
10. foothebar
匹配手機號碼:
select count(*) from DB1.user_info_table
where length(regexp_extract(telephone, '(1[0-9]{10})', 1))=11;