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') 为固定写法,区分大小写!!! 2023.8.15 今天主要学习了数据的加载,分为几种方式 1 LOAD语法
是从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 表数据导出 - insert overwrite 方式
将 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 表数据导出 - hive shell
• 基本语法:( 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 2023.8.16 今天主要了解了一下大数据开发的流程 主要是爬取数据+清洗,爬取数据是用的python编写的爬虫,爬取完成之后还需要对数据进行一个预处理 预处理主要是通过分隔符把对应的内容分隔开 之后需要把内容上传到hive数据库,通过hive中的sql语句对数据进行清洗,清洗完成之后可以输出 2023.8.17 今天做了一下北京市政,具体流程会在明天的博客中写明,以下放一张FineBI实现的图片说明自己已经完成了
2023.8.18 今天主要先说一下流程,首先是 用python爬取数据,爬取之后存到本地的txt文件中,爬取下来的文件有些很标准有些很混乱,需要进行清洗 用mapreduce进行数据的清洗,有些数据比较标准,直接用excel清洗即可,清洗完成之后需要做的是把预处理完的数据上传到hdfs,需要先 打开虚拟机,连接finalshell和Datagrip,在DataGrip中对hive进行操作,读取数据并实现分表,之后其实应该用echarts,这样加上spring boot 和web可以实现动态显示结果内容,但是我由于没有学过这几项技术,因此直接用了一个国产的软件finalBI,直接对数据库中的内容做了一个 可视化的展示,后续会学习spring和echarts的内容 2023.8.19 今天主要是放一下python的爬虫代码
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","")