2023.8.14-2023.8.20暑假第六周博客

Arkiya / 2023-08-19 / 原文

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","")