Spark大数据分析实务 课件 项目3 基于Hive实现广告流量检测数据存储_第1页
Spark大数据分析实务 课件 项目3 基于Hive实现广告流量检测数据存储_第2页
Spark大数据分析实务 课件 项目3 基于Hive实现广告流量检测数据存储_第3页
Spark大数据分析实务 课件 项目3 基于Hive实现广告流量检测数据存储_第4页
Spark大数据分析实务 课件 项目3 基于Hive实现广告流量检测数据存储_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hive实现广告流量检测数据存储知识准备教学目标知识目标了解Hive中的数据类型。掌握创建和管理数据库的操作方法。掌握创建和修改表的操作方法。掌握Hive数据导入与导出操作方法。教学目标技能目标能够认识Hive中的数据类型。能够完成数据库的创建与管理。能够根据要求创建表并导入相应的数据。素质目标具备科学的思辨能力,能够了解、认识并在实际需求中自如的运用Hive中的数据类型。具有辩证统一的思维能力,能够清晰辨别对数据库、表的操作方法的不同点,以及总结归纳对数据库、表的操作方法的相同点。具备较强的组织协调和管理能力,能够像数据库对Hive表的统一管理一样,协调实际问题和管理进度等问题。思维导图项目背景将数据存储在数据表中可以更好地组织和管理数据。数据表提供了结构化的方式来定义数据的模式和字段,使得数据更易于理解和使用。虽然本项目所使用的数据文件大小仅为几百MB,但是在广告检测中,每一秒都会采集一条或多条状态数据,由于采集频率较高,数据总量非常大。Hive的存储底层架构基于Hadoop分布式文件系统(HDFS),可以与Hadoop集群无缝集成,通过将数据存储在Hive中,可以充分发挥Hadoop集群的分布式存储能力和并行处理能力。虽然Spark也可以直接读取文件数据,但是将数据存储在Hive表中可以更好地利用数据库系统的优势,提高数据处理的效率和灵活性,因此,广告数据监测公司在对广告流量检测数据进行违规识别操作前,需先将广告流量检测数据存储至Hive中。项目目标使用HQL语言将广告流量检测数据存储至Hive中,为后续数据分析奠定数据基础。目标分析使用create命令在Hive中创建数据库ad_traffic和Hive表case_data_sample。使用load命令将广告流量检测数据导入至Hive表case_data_sample。了解Hive中的数据类型创建与管理数据库创建表修改表导入数据至Hive表导出Hive数据了解Hive中的数据类型在创建Hive表时需要指定字段的数据类型,而Hive支持关系型数据库中的大多基础数据类型,还支持在关系型数据库中很少出现的复杂数据类型,如下图。了解Hive中的数据类型Hive数据类型说明如下表。需要注意的是:Hive不区分大小写,本书统一英文小写。类型数据类型描述举例基础数据类型tinyint1byte有符号整型20smallint2byte有符号整型20int/integer4byte有符号整型20bigint8byte有符号整型20float单精度浮点型3.14159fdouble双精度浮点型3.14159doubleprecision同double,是double类型的别名3.14159decimal高精度浮点型,精度为38位DECIMAL(12,2)了解Hive中的数据类型类型数据类型描述举例基础数据类型numeric同decimal,从Hive3.0开始提供NUMERIC(20,2)timestamp时间戳1327882394date以年/月/日形式描述的日期,格式为YYYY-MM-DD2023-10-26interval表示时间间隔INTERVAL'1'DAYstring(char、varchar)字符串Helloworldboolean布尔类型Truebinary二进制数组(又称字节数组)01了解Hive中的数据类型类型数据类型描述举例复杂数据类型array数组类型(数组中字段的类型必须相同)user[1]map一组无序的键/值对,其中键和值可以是任意数据类型。在Hive中,可以使用map[key]的语法来访问map中的值user[name]struct在Hive中,可以使用点号(.)的语法来访问结构体中的字段user.ageuniontypeuniontype可以包含多个不同数据类型的取值假设foo列的数据类型为“uniontype<int,struct<a:int,b:string>>”那么,foo列的值可为{1:{"col1":2,"col2":"b"}}了解Hive中的数据类型创建与管理数据库创建表修改表导入数据至Hive表导出Hive数据创建与管理数据库数据库的操作主要包括数据库的创建和对已存在的数据库的管理。数据库的管理操作包括删除、更改和使用数据库。创建数据库语法格式使用create命令可以创建数据库,创建数据库语法的部分关键字说明如下表。关键字说明create(database|schema)“create(database|schema)”是固定的HQL语句,用于创建数据库“database|schema”是用于限定创建数据库或数据库模式ifnotexistsdatabase_namedatabase_name表示创建数据库的名称,这个名称是唯一的,唯一性可以通过“ifnotexists”进行判断locationhdfs_path指定数据库存储在HDFS上的位置。默认情况下,创建的数据库存储在/user/hive/warehouse/db_name.db/table_name/partition_name/路径下创建数据库语法格式创建一个名为weather的数据库,并且通过使用“showdatabases;”命令,显示数据仓库列表信息,将看到新建的数据库weather,如下图。创建数据库语法格式创建成功后,通过WebUI打开Hive数据库所在HDFS路径(由于在第2章Hive的配置文件hive-site.xml中指定的是“jdbc:mysql://master:3306/hive”,因此可在master节点的/user/hive/warehouse中进行查看),如下图。删除数据库语法格式使用drop命令可以删除数据库。“dropdatabase”命令用于删除数据库,默认删除的行为是restrict,表示若数据库不为空,则数据库删除将失败。在删除数据库时,若数据库中有数据表,则必须先删除数据表,才能删除数据库。也可以直接使用“dropdatabasedatabase_namecascade;”命令强制性删除,一般要慎用。更改数据库语法格式使用alter命令可以更改数据库当前目录,更改数据库的语法格式如下。其中,该语法仅适用于Hive2.2.1、2.4以及更高版本的Hive。“alterdatabase...setlocation”语句不会将数据库当前目录的内容移动到新指定的位置,不会更改与指定数据库下的任何表/分区关联的位置,仅更改将为此数据库添加新表的默认父目录,此行为类似于更改表目录,不会将现有分区移动到新位置的方式。数据库创建好后不能更改有关数据库的其他元数据。使用数据库语法格式使用use命令可以使用某一个数据库,在该数据库里进行操作,包括Hive表的创建、修改。在Hive0.6中添加了“usedatabase_name”。通过使用use命令可为所有后续HQL语句设置当前数据库。通过“selectcurrent_database();”语句可以检查当前正在使用的数据库。将当前工作表所在数据库还原为默认数据库default,需要使用关键字default而不是数据库名称。查看当前正在使用的数据库,并修改当前所用数据库为weather,如下图。了解Hive中的数据类型创建与管理数据库创建表修改表导入数据至Hive表导出Hive数据创建表完成创建数据库后,使用use命令切换到对应的数据库,即可在指定的数据库中进行数据表的创建、修改等操作。需要说明的是,上述创建Hive数据表的语法中,[]中包含的内容为可选项,在创建表的同时可以声明很多约束信息,其中重要关键字的说明如下表。关键字说明createtable“createtable”用于创建一个指定名字的表,Hive默认创建内部表。若相同名字的表已经存在,则抛出异常;用户可以用“ifnotexists”选项忽略这个异常ifnotexistsexternal“external”关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(location),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,则仅记录数据所在的路径,不对数据的位置做任何改变。在删除表时,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据创建表关键字说明partitionedby“partitionedby”用于创建带有分区的表,一个表可以拥有一个或多个分区,每个分区以文件夹的形式单独存在于表文件的文件夹下,表和列名不区分大小写,分区是以字段的形式在表结构中存在,通过describe命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示clusteredby对于每一个表(table)或分区表,Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive是针对某一列进行桶的组织,对列值进行哈希计算后,除以桶的个数求余,最终决定该条记录存放在哪个桶当中。把表(或分区表)组织成桶(Bucket)有如下两个理由。(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。连接两个在(包含连接列的)相同列上划分了桶的表,可以使用Map端连接(Map-sidejoin)高效地实现,如join连接操作当两个表有一个相同的列时,如果对这两个表进行桶操作,那么将保存相同列值的桶进行join操作即可大大减少join连接的数据量。(2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的小部分数据上试运行查询那么会更加方便创建表关键字说明sortedby对列排序的选项,可以提高查询的性能rowformat行格式是指一行中的字段存储格式,在加载数据时,需要选用合适的字符作为分隔符来映射字段,否则表中数据为nullstoredas指文件存储格式,默认指定TextFile格式,导入数据时会直接将数据文件复制到HDFS上不进行处理,数据不压缩,解析开销较大location指需要将对应数据库表的映射在HDFS上的实际路径创建表其中还需补充以下两点内容。在编写rowformat选项参数时,可以选用以下指定规则。serde是Hive中用于序列化和反序列化数据的机制,定义了数据的解析和存储格式。在编写storedas选项参数时,可以选用以下指定规则。storedas选项参数用于指定在Hive中创建表时使用的存储格式,支持二进制文件格式(sequencefile)、文本文件(textfile)、列式存储格式(rcfile)等作为存储格式。创建表人们生活在自然界里,气温每时每刻都在影响人们的生活、工作及一切活动,气温的变化受到多个因素的综合影响,包括大气状况和人类活动等。为了应对气候变化,人们积极采取低碳出行等措施来减少有害气体的排放,如一氧化碳和二氧化碳,并致力于坚持绿色发展。通过努力保护环境、推动可持续发展,为创造更健康的环境、实现可持续的未来不懈奋斗。在对创建Hive数据表的语法格式有了基本了解后,将通过气温数据演示说明Hive数据表的具体创建方式。创建表现有一份从天气网采集到的2023年1月1日至6月30日的4个城市的历史气温数据,数据字段说明如下表。字段说明city城市名称r_date记录日期week星期low最低气温(单位:℃)hight最高气温(单位:℃)weather天气wind风向和风力等级创建内部表Hive表创建与传统数据库一样,表都是存储在数据库上的,因此,创建表之前必须指定存储的数据库。在weather数据库上创建一个名为weather的内部表。浏览器登录“http://master:9870”,选择“Utilitles…”→“Browsethefilesystem”,进入HDFS管理界面,如下图。创建内部表通过master节点的WebUI中查看创建的weather表的位置,如下图。创建外部表因为外部表不需要移动结构化数据文件,所以当文件较大时,可以选择创建外部表。外部表创建流程如下。上传文件weather.csv至Linux。通过Xftp根据将数据文件weather.csv上传至Linux文件系统目录/opt下,为避免文件中首行字段名在Hive表中显示异常,使用“sed-i'1d'/opt/weather.csv”命令,删除首行字段名。上传文件weather.csv至HDFS。将weather.csv文件上传至HDFS上的/weather路径下(在上传之前先在HDFS上创建/weather目录),用于模拟生产环境下的数据文件。创建外部表创建外部表。在weather数据库下创建一张外部表weather_external,关键代码解释如下表。关键代码说明createexternaltable“createexternaltable”表示创建一个外部表rowformatdelimitedfieldsterminatedby','“rowformatdelimitedfieldsterminatedby','”用来指定字段之间的分隔符为逗号location“location”表示在HDFS上数据文件的路径创建外部表查看外部表。使用“showtables;”命令查看weather数据库中的数据表,结果如下图,可以看到weather_external外部表已经创建成功。创建外部表通过“select*fromweather_external;”命令可以查看weather_external表数据内容,部分结果如下图。创建分区表分区表是按照属性在目录层面给文件更好的管理,分区表实际上是对应一个在HDFS上的独立文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区也可以理解为分目录,当查询分区表指定分区的数据时可通过where子句中的表达式选择查询指定的分区数据,这样的查询效率会提高很多。创建分区表分两种,一种是单分区,即表示在表目录下只有一级目录。另外一种是多分区,表目录下出现多个目录嵌套。本小节仅以单分区为例介绍创建分区表的创建。若读者想学习多分区则可以参考官方文档。创建分区表以创建一个单分区的分区表为例,创建一个以city为分区的weather_part表。通过master节点的WebUI中查看创建的weather_part表的位置,如下图。创建桶表Hive的桶表是针对某一字段进行桶的组织,对字段的值进行哈希计算后,除以桶的个数求余,最终决定该条记录存放在哪个桶当中。创建一个分桶表weather_bucket,然后以city字段值进行分桶,并设置桶数量为4。使用“showtables;”命令查看weather数据库中的数据表,结果如下图,可以看到weather_bucket桶表已经创建成功。了解Hive中的数据类型创建与管理数据库创建表修改表导入数据至Hive表导出Hive数据修改表Hive提供了丰富的有关修改表的操作,如表的重命名、增加修改表的列信息、添加分区、删除分区等操作,这些操作可以修改元数据,但不会修改数据本身。重命名表使用“altertable”语句将表weather重命名为weather_in。执行代码后,可通过“showtables;”命令查看数据库中的表,结果如下图,对比上图,可以看出weather已经重命名为weather_in。增加表的列信息在增加修改表的列信息之前,需要掌握表的结构信息,因此添加表的列信息操作如下。查看表结构。通过describe命令查看一下weather_part表的结构,结果如下图。(提示:describe命令可以简写成“desc”。)增加表的列信息增加“气压”列信息。使用“altertable”语句向表weather_part表中添加pressure(大气压,单位为hPa)。然后通过“describeweather_part;”命令查看表结构,最终结果如下图,对比上图,表weather_part多了添加的一列信息。修改表的列信息使用“altertable”语句重命名表中的列名,将表weather_part表中的列low重命名为temperature_min,将列hight重命名为temperature_max。修改后可使用“describeweather_part;”命令查看表结构命令查看,如下图,对比上图,可以看出列名low、hight已成功修改为temperature_min、temperature_max。添加分区使用“altertable”语句修改表的分区,将weather_part分区表,新增city为“GuangZhou”的分区。在master节点的WebUI中,查看weather_part表多了一个“city=GuangZhou”的分区,如下图。删除分区新增分区后,如不需要使用可以删除分区,现将新增的“city=GuangZhou”的分区删除。成功删除如下图。了解Hive中的数据类型创建与管理数据库创建表修改表导入数据至Hive表导出Hive数据导入数据至Hive表Hive导入数据常用的方式有:将文件系统中的数据导入Hive;将其他Hive表查询到的数据导入Hive。从文件系统中导入数据至Hive表将文件系统中的数据导入Hive有两种方式:将Linux本地文件系统的数据导入Hive,将HDFS的数据导入Hive。load命令部分关键字解释说明如下表。关键字说明local导入语句若有local关键字,则说明是导入Linux本地的数据,若不加local关键字,则是从HDFS导入数据。如果将HDFS的数据导入Hive表,那么HDFS上存储的数据文件会被移动到表目录下,因此原位置不再有存储的数据文件filepath数据的路径,可以是相对路径(./data/a.txt),绝对路径(/user/root/data/a.txt)或包含模式的完整URL(hdfs://master:8020/user/root/a.txt)overwrite加入overwrite关键字,表示导入模式为覆盖模式,即覆盖表之前的数据;若不加overwrite关键字,则表示导入模式为追加模式,即不清空表之前的数据partition如果创建的是分区表,那么导入数据时需要使用partition关键字指定分区字段的名称从文件系统中导入数据至Hive表将到Linux的/opt/目录下的weather.csv数据导入Hive表中,将数据导入Hive表中。导入数据后,数据会被存储在HDFS上相应的表的数据存放目录中。在HDFS的WebUI中,可以看到表weather_in的目录中有一份导入数据weather.csv,如下图。从文件系统中导入数据至Hive表单击上图中的“weather.csv”,然后单击“Headthefile”,查看表weather.csv的数据,如右图。通过查询语句向表中插入数据将通过查询语句查询到的数据插入Hive表有3种方法:查询数据后单表插入,查询数据后多表插入,查询数据后建新表。通过查询语句向表中插入数据1.单表插入数据Hive单表插入数据语法如下,该语法表示从表2查询出字段1、字段2和字段3的数据并插入到表1中,表1中的3个字段的类型与表2中的3个字段的类型应一致。Hive单表插入数据语法的部分关键字说明如下表。关键字说明overwrite|into插入时选择overwrite关键字会覆盖原有表或分区数据,选择into关键字则是追加数据到表或分区partition单表插入数据时可以使用partition关键字指定分区插入通过查询语句向表中插入数据通过Hive单表插入数据的方式,将表weather_in的数据覆盖导入至表weather_bucket中。通过浏览器登录HDFS的WebUI,因为表weather_bucket是桶表,且桶的个数为4,所以可看到weather_bucket目录下存在4份文件,如下图。通过查询语句向表中插入数据2.查询数据后多表插入Hive支持多表插入,即可以在同一个查询中使用多个insert子句,好处是只需要扫描一遍源表即可生成多个不相交的输出。多表插入与单表插入的不同点在于语句写法,多表插入将执行查询的表语句放在开头的位置。其他关键字解释同单表插入数据。Hive多表插入数据语法如下,该语句表示从表1中查询字段1插入到表2,从表1中查询字段2插入到表3。表1中字段1的类型应与表2中字段1的类型一致,表1中字段2的类型应与表3中字段2的类型一致。通过查询语句向表中插入数据通过Hive多表插入数据的方式,将表weather_in中的low字段数据插入至temp1表中,并将表weather_in中的hight字段数据插入至temp2表中,其中,需要先创建temp1、temp2两个表。由于需要经过MapReduce计算,所以插入数据过程耗时较长,成功插入结果如下图。通过查询语句向表中插入数据3.查询数据后建新表Hive查询数据后建新表语法如下,该语句表示从表1中查询字段1、字段2、字段3的数据并插入到新建的表2中。通过Hive查询数据后建新表的方式,创建新表temp3并导入表weather_in的数据,新表temp3的部分数据如下图。了解Hive中的数据类型创建与管理数据库创建表修改表导入数据至Hive表导出Hive数据导出Hive数据将数据导入Hive后,在Hive中可以对数据进行基本的探索和简单的处理,处理好的数据通常会进行导出,保存到其他的存储系统中。Hive的数据可以导出到本地文件系统和HDFS。将Hive数据导出至本地文件系统将Hive数据导出至本地文件系统,将Hive表weather_external的数据导出至本地文件系统的/opt/output目录下。数据导出的目标目录会完全覆盖之前目录下的所有内容,因此导出数据到本地文件系统时,尽量选择新的目录。将表weather_external的数据导出至本地文件系统的/opt/output目录后,可通过使用“ll”命令查看/opt/output目录下的数据文件的详细信息,结果如下图。将Hive数据导出至HDFS将表weather的数据导出到HDFS的/user/code目录下,数据导出的模式是覆盖模式。导出结果如右图。Hive数据导出到本地文件系统和HDFS的语法非常相似,两者之间的区别在于,Hive数据导出到本地文件系统的目标目录时需要添加local关键字,而Hive数据导出到HDFS无须添加local关键字。Hive实现广告流量检测数据存储项目实施创建数据表导入数据至Hive表数据字段说明本项目将7天的流量记录作为原始建模数据。广告检测中的流量数据包含22个属性,数据示例及说明如下表。序号属性名称中文名称示例备注1rank记录序号5(第5条记录)单元格高度统一为1.2cm2dt相对日期3(第3天)单位为天3cookieCookie值7083a0cba2acd512767737c65d5800c84ipIP地址47经过脱敏5idfaidfa值bc50cc5fb39336cf39e3c9fe1b16bf48可用于识别iOS用户数据字段说明序号属性名称中文名称示例备注6imeiimei值990de8af5ed0f3744b61770173794555可用于识别Android用户7androidandroid值7730a40b70cf9b023d23e332da846bfb可用于识别Android用户8openudidopenudid值7aaeb5d6af25f9fe918ec39b0f79a2c8可用于识别IOS用户9macMac值6ed9fcefd06a2ab5f901e601a3a53a2d可用于识别不同硬件设备10timestamps时间戳0(记录于数据区间的初始时间点)11camp项目ID61520数据字段说明序号属性名称中文名称示例备注12creativeid创意ID013mobile_os设备OS版本信息5.0.2该值为原始值14mobile_type机型'Redmi+Note+3'(设备为红米Note3)15app_md5App密钥的MD5信息ffe435bdb6ce18dd4758c0005c4787db16app_md5App名称的MD5信息6f569b4fa576d25fb98e60bda9c9742617placementid广告位信息72ee620530c7c8cd4b423d4b4502b45b数据字段说明序号属性名称中文名称示例备注18useragent浏览器信息"Mozilla%2f5.0%20%28compatible%3b%20MSIE%209.0%3b%20Windows%20NT%206.1%3b%20Trident%2f5.0%29%20Fengxing%2f7%20MZ%2f75B00973C5D899C8BA4858F5E4FAA59B"19mediaid媒体ID信息111820os_typeOS类型标记0(采集到的OS类型标记为0)21born_timeCookie生成时间160807(第160807日)22label违规标签01为违规创建Hive表创建Hive表的基本步骤如下图。创建Hive表1.启动集群和服务在创建Hive表之前,需开启相应的Hadoop集群和元数据服务。可通过“jps”命令查看进程,如下图,已成功启动Hadoop集群和元数据服务。创建Hive表2.启动HiveCLI使用“hive”命令进入Hive命令行界面,如下图。创建Hive表3.创建数据库通过创建数据库,可以将相关的表和数据组织在一起,使得数据管理更加清晰和规范,实现逻辑上的划分,因此创建广告流量检测数据表前,可以先创建数据库ad_traffic,通过查看数据库检验是否成功创建,运行结果如下图。创建Hive表4.创建Hive表创建好数据库后,即可在数据库ad_traffic内创建Hive表case_data_sample。由于若是直接向Hive表导入CSV的数据,字段类型会全部变成String类型,不利于后续数据分析,所以需要创建两个Hive表case_data_sample_tmp和case_data_sample,case_data_sample_tmp用于导入CSV文件的数据,再将case_data_sample_tmp表的数据复制到case_data_sample。创建Hive表通过“showtables;”命令可验证是否成功创建Hive表,如下图,Hive中存在表case_data_sample和case_data_sample_tmp。创建数据表导入数据至Hive表导入数据至Hive表广告流量检测违规识别项目所提供的建模数据已经标记了相关流量数据是否作弊的标签,然而目标网站在收集流量数据的时候是没有类别标签的,所以应该处理一份没有标签的数据,与原始的网站数据一致,以便在后期用于模型应用,更加贴合实际生产环境。综上,导入数据至Hive表的基本操作流程如下图。导入数据至Hive表导入数据至Hive表的过程主要涉及以下步骤。上传文件并删除文件首行。通过Xftp工具将CSV数据csv_data_new.csv上传到Linux的/opt目录下,通过命令“sed-i'1d'/opt/case_data_new.csv”删除文件首行的字段名。导入数据至表case_data_sample_tmp。使用load命令将Linux本地数据导入表case_data_sample_tmp。导入数据至Hive表导入数据至表case_data_sample。使用insert命令将表case_data_sample_tmp的数据导入表case_data_sample。导入成功后,可以使用“select*fromcase_data_samplelimit1;”命令查看表case_data_sample的第一行数据,如下图。生成样本数据表case_data。生成一份未进行类别标识的样本数据,以原始建模数据为基础,生成没有类别标签的样本数据。小结本项目首先介绍了Hive的数据类型,为学习Hive表的创建奠定基础;其次介绍了数据库的创建与管理操作,使得数据更加有序和易于维护;再次介绍了表的创建与修改,了解如何灵活地构建和调整表结构,能够掌握Hive表的创建和管理技巧;从次介绍了数据的导入与导出,实现数据的存储与备份;实践没有止境;最后实现了创建广告流量检测数据表与导入相应数据至Hive表,为后续的广告流量检测数据分析提供基础数据。Hive实现广告流量检测数据存储技能拓展+测试题技能拓展在数据查询的语法格式中,“select…from…”为select语句的主体部分,在select续接的部分可为“*”(表示指定所有数据)通配符、数据表的字段名、Hive中的各类函数、算术表达式等内容,from后接的可以是表、视图或子查询语句。其中[]中包含的内容为可选项,数据查询的语法格式的关键字介绍如下表。关键字说明table_referencetable_reference可以是一张表,一个视图或一个子查询语句where可选参数,用于指定查询条件distinctdistinct关键字用于剔除查询结果中重复的数据,如果没有定义那么将输出全部数据groupbygroupby用于将查询结果按照指定字段进行分组having可选参数,与groupby关键字连用,可以将分组后的结果进行过滤技能拓展关键字说明distributebydistributeby是根据指定字段分发到不同的Reducer进行处理,且分发算法采用哈希散列,类似MapReduce中的Partition分区,通常结合sortby使用sortbysortby是在数据进入Reducer前完成排序,因此不是全局排序,如果设置mapred.reduce.tasks>1,那么sortby只能保证每个Reducer的输出有序,不保证全局有序clusterbyclusterby是一个分桶查询语句,根据指定的字段进行分桶,分桶数取决于用户设置reduce的个数,并且分桶后,每桶数据都会进行排序。如果distributeby和sortby指定的字段是同一个,那么此时可以理解为distributeby+sortby=clusterbyorderby用于将查询结果按照指定字段进行全局排序,因此输出文件只有一个,且只存在一个Reducer,当数据量很大时﹐需要较长的计算时间limitlimit关键字用于限制查询结果返回的行数,其中“offset”用于指定起始位置,计数从0开始;“rows”用于指定返回的行数技能拓展1.简单查询天气数据使用select语句加limit关键字,读取数据库weather的表weather_in的前10行数据,运行结果如下图。技能拓展表weather_in的数据中包含了最低温度和最高温度,为了解一天的温差变化,可以使用select语句,计算最高温度和最低温度的差值,同样只查看前10行数据,运行结果如下图。技能拓展2.依据城市分组统计天气数据量使用select语句加groupby关键字,可以统计表weather_in中每个城市的数据量。运行结果如下图,表weather_in均记录了4座城市的181天气温数据。知识测试(1)下列不属于Hive的数据类型是()。A.tinyintB.charsC.dateD.boolean(2)下列不能创建数据库test的语句是()。A.createdatabasetest;B.createdatabasestest;C.CREATEDATABASETEST;D.createdatabaseifnotexiststest;知识测试(3)下列关于Hive数据库的管理操作说法不正确的是()。A.数据库可直接删除B.创建数据库时需保证数据库名称的唯一性C.删除数据库时,添加关键字cascade可强制性删除数据库及其相关的表D.数据库创建好后不能更改有关数据库的其他元数据(4)下列关于Hive表创建的说法不正确的是()。A.在Hive中可使用HDFS上的数据创建外部表B.在Hive中默认创建内部表C.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论