2023.8.14-2023.8.20暑假第六周博客
2023.8.14
单独看一下外部表
外部表从概念是被认为并非hive拥有的表,只是临时关联数据去使用,创建外部表也很简单,基于外币表的特性,外部表和数据的相互独立的
可以先有表,然后把数据移动到指定的路径下
也可以是现有数据,然后创建表通过location(路径)指向数据
内部表和外部表可以相互转换
• 内部表转外部表
alter table stu set tblproperties('EXTERNAL'='TRUE');
• 外部表转内部表
alter table stu set tblproperties('EXTERNAL'='FALSE');
通过 stu set tblproperties 来修改属性
要注意: ('EXTERNAL'='FALSE') 或 ('EXTERNAL'='TRUE') 为固定写法,区分大小写!!!

是从hdfs文件管理系统中加载数据
也可以从其他表中加载数据
INSERT [OVERWRITE | INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT
EXISTS]] select_statement1 FROM from_statement;
将 SELECT 查询语句的结果插入到其它表中,被 SELECT 查询的表可以是内部表或外部表。
示例:
INSERT INTO TABLE tbl1 SELECT * FROM tbl2;
INSERT OVERWRITE TABLE tbl1 SELECT * FROM tbl2;
数据加载 - 两种语法的选择
对于数据加载,我们学习了: LOAD 和 INSERT SELECT 的方式,那么如何选择它们使用呢?
• 数据在本地
• 推荐 load data local 加载
• 数据在 HDFS
• 如果不保留原始文件: 推荐使用 LOAD 方式直接加载
• 如果保留原始文件: 推荐使用外部表先关联数据,然后通过 INSERT SELECT 外部表的形式加载数据
• 数据已经在表中
• 只可以 INSERT SELECT
将 hive 表中的数据导出到其他任意目录,例如 linux 本地磁盘,例如 hdfs ,例如 mysql 等等
语法: insert overwrite [local] directory ‘path’ select_statement1 FROM from_statement;
• 将查询的结果导出到本地 - 使用默认列分隔符
• 将查询的结果导出到本地 - 指定列分隔符
• 将查询的结果导出到 HDFS 上 ( 不带 local 关键字 )
insert overwrite local directory '/home/hadoop/export1' select * from test_load ;
insert overwrite local directory '/home/hadoop/export2' row format delimited fields terminated by '\t'
select * from test_load;
insert overwrite directory '/tmp/export' row format delimited fields terminated by '\t' select * from
test_load;
• 基本语法:( hive -f/-e 执行语句或者脚本 > file )
bin/hive -e "select * from myhive.test_load;" > /home/hadoop/export3/export4.txt
bin/hive -f export.sql > /home/hadoop/export4/ex

import json
import requests
import demjson
from bs4 import BeautifulSoup
import jieba
import jieba.analyse as analyse
import csv
kv = {
'Host': 'www.beijing.gov.cn',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'text/json',
'X-Requested-With': 'XMLHttpRequest',
'Content-Length': '155',
'Origin': 'http://www.beijing.gov.cn',
'Connection': 'keep-alive',
'Referer': 'http://www.beijing.gov.cn/hudong/hdjl/'}
kv1 = {'user-agent': 'Mozilla/5.0'}
if __name__ == "__main__":
page=1
query = {
}
datas = json.dumps(query)
while page<175:
print(page)
url = "https://www.beijing.gov.cn/hudong/hdjl/sindex/bjah-index-hdjl!replyLetterListJson.action?page.pageNo="+str(page)+"&page.pageSize=6&orgtitleLength=26"
r = requests.post(url, data=datas, headers=kv)
rr = demjson.decode(r.text);
for item in rr["result"]:
originalId=item["originalId"]#编号
letterTypeName=item["letterTypeName"]#信件类型
#咨询
url1 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId="+originalId
#建议
url2 = "http://www.beijing.gov.cn/hudong/hdjl/com.web.suggest.suggesDetail.flow?originalId="+originalId
if letterTypeName=="咨询":
r1 = requests.get(url1, headers=kv1)
else:
r1 = requests.get(url2, headers=kv1)
demo = r1.text
soup = BeautifulSoup(demo, "html.parser")
title=soup.find("strong").get_text().replace("\n","")
fromPeople=soup.find_all("div", {"class": "col-xs-10 col-lg-3 col-sm-3 col-md-4 text-muted"})[0].get_text().lstrip('来信人:').lstrip().rstrip()
fromTime=soup.find_all("div", {"class": "col-xs-5 col-lg-3 col-sm-3 col-md-3 text-muted"})[0].get_text().lstrip('时间:')
problem=soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-2 text-muted mx-2"})[0].get_text().lstrip().rstrip().replace("\r","").replace("\n","")
office=soup.find_all("div", {"class": "col-xs-9 col-sm-7 col-md-5 o-font4 my-2"})[0].get_text().replace("\n","")
answerTime=soup.find_all("div", {"class": "col-xs-12 col-sm-3 col-md-3 my-2"})[0].get_text().lstrip('答复时间:')
answer=soup.find_all("div", {"class": "col-xs-12 col-md-12 column p-4 text-muted my-3"})[0].get_text().lstrip().rstrip().replace("\n","").replace("\r","")