精华内容
下载资源
问答
  • 答:HTML标签是超文本标记语言基本单位,而HTML元素指是从开始标签到结束标签所有代码,属性包含元素额外信息,这些信息不会出现在实际内容中 3. 文档类型是什么概念,起什么作用? 答:告知浏览器文档...

    第二天和第三天 给自己做一个在线简历

    1 首先回答验证学习效果的几个问题

    1. HTML是什么,HTML5是什么
    答:HTML是告知浏览器如何组织页面的标记语言,HTML5是最新的HTML标准,专门为承载丰富的web内容而设计,无需额外插件
    2. HTML元素标签、属性都是什么概念?
    答:HTML标签是超文本标记语言的最基本单位,而HTML元素指的是从开始标签到结束标签的所有代码,属性包含元素的额外信息,这些信息不会出现在实际的内容中
    3. 文档类型是什么概念,起什么作用?
    答:告知浏览器文档使用哪种HTML或XHTML规范。
    4. meta标签都用来做什么的?
    答:meta标签用来为文档添加元数据,元数据是指描述数据的数据,可用来指定文档中字符的编码,添加作者和描述,添加作者在需要联系作者时很有用,添加描述对于SEO很有用
    5. Web语义化是什么,是为了解决什么问题
    答:web语义化是为了让机器理解数据,使得网络上的信息更加容易被机器理解和查找,从而提升人类使用网络获取信息的体验
    6. 链接是什么概念,对应什么标签?
    答:超链接使我们能够将我们的文档链接到任何其他文档(或其他资源),也可以链接到文档的指定部分,对应<a>标签
    7. 表单标签都有哪些,对应着什么功能,都有哪些属性
    8. ol, ul, li, dl, dd, dt等这些标签都适合用在什么地方,举个例子
    答:ol标签用于有序列表,ul用于无序列表,dl,dt,dd用于描述列表,标记一组项目及其相关描述,例如术语和定义,或者问题和答案。

    学习感悟

    实际写能很好的对知识进行巩固,当实现同一个效果,思考选这个标签还是那个标签就会让你对已经看过的知识更加熟悉

    展开全文
  • 建立决策树关键,即在当前状态下选择个属性作为分类依据。根据不同目标函数,建立决策树主要有以下种算法。 ID3(Iterative Dichotomiser) C4.5 CART(Classification And Regression Tree) ID3 ID3算法...

    目录

    ID3

    C4.5

    CART


    我们知道决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处的熵值为零,此时每个叶子结点中的实例都属于同一类。

    建立决策树的关键,即在当前状态下选择哪一个属性作为分类依据。根据不同的目标函数,建立决策树主要有以下三种算法。

    • ID3(Iterative Dichotomiser)
    • C4.5
    • CART(Classification And Regression Tree)

    ID3

    ID3算法的核心思想就是以信息增益来度量特征的选择,选择分裂后信息增益最大的特征进行分裂。信息增益表示得知特征A的信息而使得类X的信息的不确定性减少的程度。

    要理解信息增益我们先从信息熵的定义开始。信息熵是香农借鉴热力学的概念提出的对信息进行描述的概念,指信息中排除了冗余后的平均信息量。不确定函数f应满足两个条件:(1)f是事情发生概率P的减函数;(2)两个独立符号所产生的不确定性等于各自不确定性之和。所以有f(P)=log(\frac{1}{P})=-logP,信息源的平均不确定性应当为单个符号不确定性-log(P_{i})的统计平均值(E),可称为信息熵,即

                                                                                  H(u)=E[-logP_{i}]=-\sum_{i=1}^{n}P_{i}logP_{i}

    H(Y|X)=H(X,Y)-H(X)被称为条件熵,表示X发生的前提下Y的熵,当熵和条件熵中的概率🈶数据估计(特别是极大似然估计)得到时,所对应的熵和条件熵分别成为经验熵经验条件熵。定义:特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)的特征A给定条件下D的经验条件熵H(D|A)之差,即g(D,A)=H(D)-H(D|A),显然,这即为训练数据集D和特征A的互信息。

    推导条件熵的定义式

                                                                         H(Y|X)=H(X,Y)-H(X)\\ =-\sum_{x,y}p(x,y)log(x,y)+\sum_{x}p(x)logp(x)\\ =-\sum_{x,y}p(x,y)logp(x,y)+\sum_{x}(\sum_{y}p(x,y))logp(x)\\ =-\sum_{x,y}p(x,y)logp(x,y)+\sum_{x,y}p(x,y)logp(x)\\ =-\sum_{x,y}p(x,y)log\frac{p(x,y)}{p(x)}\\ =-\sum_{x,y}p(x,y)log(p(y|x)

    信息增益的计算方法

    设训练数据集为D,|D|表示样本个数;

    设有K个类C_{k},k=1,2...K,C_{k}为属于类C_{k}的样本个数,有:\sum_{k} |C_{k}|=|D|

    设特征A有n个不同的取值{{a_{1},a_{2}...a_{n}}},根据特征A的取值将D划分为n个子集D_{1},D_{2}...D_{n},|D_{i}|D_{i}的样本个数,有:\sum_{i}|D_{i}|=|D|

    记子集D_{i}中属于类C_{k}的样本的集合为D_{ik},|D_{ik}|D_{ik}的样本个数。

    计算数据集D的经验熵:

                                                                                           H(D)=-\sum_{k=1}^{K}\frac{C_{k}}{D}log\frac{C_{k}}{D}

    计算经验条件熵H(D|A):

                                                                          H(D|A)=-\sum_{i,k}p(D_{k},A_{i})logp(D_{k}|A_{i}) \\=-\sum_{i,k}p(A_{i})p(D_{k}|A_{i})logp(D_{k}|A_{i})\\ =-\sum_{i=1}^{n}\sum_{k=1}^{k}p(A_{i})p(D_{k}|A_{i})logp(D_{k}|A_{i}) \\=-\sum_{i=1}^{n}p(A_{i})\sum_{k=1}^{k}p(D_{k}|A_{i})logp(D_{k}|A_{i}) \\=-\sum_{i=1}^{n}\frac{|D_{i}|}{D}\sum_{k=1}^{k}\frac{|D_{ik}|}{D_{i}}log\frac{|D_{ik}|}{D_{i}}

    计算特征A的信息增益:

                                        g(D,A)=H(D)-H(D|A)=-\sum_{k=1}^{K}\frac{C_{k}}{D}log\frac{C_{k}}{D}-\sum_{i=1}^{n}\frac{|D_{i}|}{D}\sum_{k=1}^{k}\frac{|D_{ik}|}{D_{i}}log\frac{|D_{ik}|}{D_{i}}

    遍历所有特征,选择信息增益最大的特征作为当前的分类特征。

    优点:决策树ID3算法易于理解,能处理数据型的也能处理常规型的数据,还可以在相对较短的时间内能够对大型的数据集做出可行且较好的结果。

    缺点:决策树ID3算法比较偏向于选择属性值多的类别。

    C4.5

    ID3偏向于选择属性值多的特征类别,这样会导致每个属性的样本数较少,此时噪声对模型的影响会更为显著,容易产生过拟合。为解决这一问题,引入信息增益率来作为度量进行特征选择,信息增益率公式为:

    g_{r}(D,A)=g(D,A)/H(A)

    公式中将信息增益除以所对应特征的信息熵来表示信息增益率,若特征属性值较多则H(A)较大,信息增益率比信息增益小,能够很好的抑制模型选择属性值多的特征。

    CART

    CART是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。而且每个非叶子节点都有两个孩子,所以CART的叶子节点比非叶子多1。相比ID3和C4.5,CART应用要多一些,既可以用于分类也可以用于回归。CART分类时,使用基尼指数(Gini)来选择最好的数据分割的特征,gini描述的是纯度,与信息熵的含义相似。CART中每一次迭代都会降低GINI系数。公式如下:

                                                                                        Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})\\ =1-\sum_{k=1}^{K}p_{k}^{2}\\ =1-\sum_{k=1}^{K}(\frac{|C_{k}|}{|D|})^2

    Variance方差也是衡量集合中样本不纯度的一种指标,因为只是针对连续值,因此只能用于处理回归决策树。假设集合D中每个样本的值为y_{i},那么集合D的Variance方差则定义为:

                                                                    Variance(D)=\frac{1}{N}\sum_{i=1}^{|D|}(y_{i}-\frac{1}{|D|}\sum_{j=1}^{|D|}y_{i})^2\\ =\frac{1}{|D|}(\sum_{i=1}^{|D|}y_{i}^2-\frac{1}{N}(\sum_{i=1}^{|D|}y_{i})^2)

    一个特征的信息增益(率)/gini指数越大,表明属性对样本的熵减少能力更强,这个属性使得数据由不确定性变成确定性的能力越强。

     

    展开全文
  • 一、实现效果 ... 二、实现思路 1.picker view有默认高度为162,不可修改。 2.显示数据,需要设置数据源,也有两种方式(成为数据...1)给3个lab赋值,添加三个属性(水果,主菜,饮料) 2)监听选中了一行(监听有两
  • 程序需要存储信息时,必须记录三个基本属性  (1)信息将存储在  (2)要存储什么值  (3)存储何种类型值 如: int braincount; braincount=5; 这语句表明它正在存储整数,用braincount表示该...

    面向对象编程的本质是设计并扩展自己的数据类型,让类型和数据匹配。

    内置C++分成两种类型:基本类型和复合类型

    1.简单变量

    程序需要存储信息时,必须记录三个基本属性

      (1)信息将存储在哪

      (2)要存储什么值

      (3)存储何种类型的值

    如:

    int braincount;
    braincount=5;
    

    这语句表明它正在存储整数,用braincount表示该整数的值,程序将找到一块能够存储整数的内存,将该内存标记为braincount,并把5复制到该内存单元中。

    这些语句没说这个值将存储在内存的什么位置,但程序确实记录了这种信息。可使用&来检索braincount的内存地址。

     

    2.变量名

    (1)在名称中只能使用字母字符、数字和下划线

    (2)名称的第一个字符不能是数字

    (3)区分大写字母和小写字母

    (4)不能将C++关键字用作名称

    (5)以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。

    (6)C++对名称长度没有限制,名称中所有字符都有意义,但某些平台有长度限制

    如ANSIC标准前63个字符相同则认为名称相同,即使第64个不同

     

    如果想用两个或更多的单词组成一个名称,通常用下划线字符将单词分开,如my_onions,或者从第二个单词开始将每个单词的第一个字母大写,如myEyeTooth

    术语宽度用于描述存储整数时使用的内存量,使用内存越多,则越宽

     

    3.整型short、int、long和long long

    计算机内存由一些叫位(bit)的单元组成

    16≤short≤int≤long≤long long

    且32≤long和64≤long long

    字节(byte)通常指8位(bit)的内存单元

    很多系统都使用最小长度,short16位,long32位,int可以为16、24或32位。

    int也可为64位,long和long long至少64位。

    short是short int的简称,long是long int的简称。

    这四种都是符号类型,取值范围中,负值和正值几乎相同,16位的int取值范围-32768到+32767

    用C++工具来检查类型的长度,sizeof返回类型或变量的长度,单位为字节

    字节的含义依赖于实现,一个系统中,两字节的int可能是16位,另一个系统可能为32位。

    头文件climits包含了关于整型限制的信息,定义了各种限制的符号名称,如INT_MAX为int的最大取值,CHAR_BIT为字节的位数。

    程序清单3.1 limits.cpp
    //
    limits.cpp - - some integer limies #include<iostream> #include<climits> int main() { using namespace std; int n_int = INT_MAX; short n_short = SHRT_MAX; long n_long = LONG_MAX; long long n_llong = LLONG_MAX; cout << "int is " << sizeof (int) << " bytes." << endl; cout << "short is " << sizeof n_short << " bytes." << endl; cout << "long is " << sizeof n_long << " bytes." << endl; cout << "long long is " << sizeof n_llong<< " bytes." << endl; cout << "Maximum values:" << endl; cout << "int: " << n_int << endl; cout << "short:" << n_short << endl; cout << "long:" << n_long << endl; cout << "long long:" << n_llong << endl; cout << "Minimum int value=" << INT_MIN << endl; cout << "Bits per Byte=" << CHAR_BIT << endl; cin.get(); }

    1.运算符sizeof和头文件limits

    对类型名(如int)使用sizeof时,应将名称放在括号中

    但对变量名(如n_short)使用该符号,括号是可选的

    头文件climits定义了符号常量来表示类型的限制

    下表对文件中定义的符号常量进行了总结

    climits中的符号常量
    符号常量   表示

    CHAR_BIT

    char的位数
    CHAR_MAX char的最大值
    CHAR_MIN   char的最小值
    SCHAR_MAX signed char的最大值
    SCHAR_MIN signed char的最小值
    UCHAR_MAX unsigned char的最大值
    SHRT_MAX short的最大值
    SHRT_MIN short的最小值
    USHRT_MAX unsigned char的最大值
    INT_MAX int的最大值
    INT_MIN int的最小值
    UNIT_MAX unsigned int的最大值
    LONG_MAX long的最大值
    LONG_MIN long的最小值
    ULONG_MAX unsigned long的最大值
    LLONG_MAX long long的最大值
    LLONG_MIN long long的最小值
    ULLONG_MAX unsigned long long的最大值

    climits文件中包含下面类似语句:

    #define INT_MAX 32767

    该编译指令告诉预处理器:在程序中查找INT_MAX,并将所有的INT_MAX替换为32767。

     

    2.初始化

    int owls=101;

    C++还有种C语言没有的初始化语法:

    int wrens(432);

    如果不对函数内部定义的变量进行初始化,该变量的值将不确定,意味该变量值是它被创建之前,相应内存单元保存的值。

    采用大括号初始化方式:

    可用=,也可以不用

    int emus{7};

    int rheas{12};

    其次,可以不包含任何东西,变量将被初始化为0

    int rocs={};

    int psychics{};

    第三,可以更好的防范类型转换错误。

     

    无符号类型

    无符号变体的优点是可以增大变量能够存储的最大值

    如short的范围为-32768到+32767,无符号版本为0到65535

    unsigned是unsigned int的缩写

    //exced.cpp - - exceeding some integer limits
    #include<iostream>
    #include<climits>
    
    int main()
    {
        using namespace std;
        short sam = SHRT_MAX;
        unsigned short sue = sam;
    
        cout << "Sam has " << sam << " dollars and Sue has " << sue;
        cout << " dollars deposited." << endl
            << "Add $1 to each account." << endl << "Now";
        sam = sam + 1;
        sue = sue + 1;
        cout << " Sam has " << sam << " dollars and Sue has " << sue;
        cout << " dollars deposited.\nPoor Sam!" << endl;
    
        sam = 0;
        sue = 0;
        cout << "Sam has " << sam << " dollars and Sue has " << sue;
        cout << " dollars deposited." << endl
            << "Take $1 from each account." << endl << "Now";
        sam = sam - 1;
        sue = sue - 1;
        cout << " Sam has " << sam << " dollars and Sue has " << sue;
        cout << " dollars deposited." << endl << "Lucky Sue!" << endl;
        cin.get();
    }

    这些整型变量的行为就像里程表,如果超越了限制,其值将在范围的另一端取值。

    int被设置为对目标计算机而言最自然的长度,即计算机处理起来最有效率的长度。

    节省一点就是赢得一点。

     

    整型字面值:

    如果第一位为0~9,则基数为10(十进制)

    如果第一位为0,第二位1~7,则基数为8(八进制)

    如果前两位为0x或0X,则基数为16(十六进制)

    //hexoct1.cpp - - shows hex and otcal literals
    #include<iostream>
    int main()
    {
        using namespace std;
        int chest = 42;
        int waist = 0x42;
        int inseam = 042;
    
        cout << "Monsieur cuts a striking figure!\n";
        cout << "chest=" << chest << " (42 in decimal)\n";
        cout << "waist=" << waist << " (0x42 in hex)\n";
        cout << "inseam=" << inseam << " (042 in octal)\n";
        cin.get();
    }

    都转化为了十进制

    如果像CGA视频内存段为十六进制B000,则不必在程序中使用之前转化为十进制,只要使用0xB000即可,不管哪种类型的值,在计算机中都被存储为二进制的形式。

    如果要以十六进制或者八进制的形式显示,要是用cout的一些特殊特性,采用控制符dec、hex和oct

    //hexoct2.cpp - - display values in hex and octal
    #include<iostream>
    int main()
    {
    using std::cout;
    //using std::cin;
    using std::oct;
    //using std::hex;
    //using namespace std;
    int chest = 42;
    int waist = 42;
    int inseam = 42;

    cout << "Monsieur cuts a striking figure!\n";
    cout << "chest=" << chest << " (decimal for 42)\n";
    cout <<std::hex; //也可以这样
    cout << "waist=" << waist << " (hexadecimal for 42)\n";
    cout << oct;
    cout << "inseam=" << inseam << " (octal for 42)\n";
    std::cin.get();
    }

    cout<<hex不会在屏幕上显示任何内容,只是修改cout显示整数的方式。

    转载于:https://www.cnblogs.com/daisyliar/p/7221627.html

    展开全文
  • 复杂数据类型示例建表五.Hive操作1.Hive DDL(1)创建库1)创建普通数据库2)创建库时候检查存与否3)创建库时候带注释4)创建带属性的库(2)查看库1)查看数据库2)显示数据库详细属性信息3)查看正在使用...

    Hive(一)

    一.hive基础

    1.hive产生背景

    (1)直接使用mapreduce所面临的问题

    ​ 1)、人员学习成本太高

    2)、项目周期要求太短

    3)、MapReduce实现复杂查询逻辑开发难度太大

    (2)为什么要使用 Hive:

    1)、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力

    2)、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本

    3)、更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

    2.Hive含义

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,可以将SQL语句转换成MapReduce任务运行。使不熟悉MapReduce的用户很方便地利用HQL处理和计算HDFS上的结构化的数据,适用于离线的批量数据计算。

    Hive依赖于HDFS存储数据,Hive 将HQL转换成mapreduce执行,所以说hive是基于hadoop的一个数据仓库工具,是指就是一款基于HDFS的MapReduce计算框架,对存储在HDFS中的数据进行分析和管理。

    3.Hive特点

    (1).可扩展:Hive可以自由扩展集群的规模,一般情况下不需要重启服务

    (2).延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自定义的函数

    (3).容错性:良好的容错性,即使节点出现问题SQL仍可完成执行。

    优势:

    • 提供了一个简单的优化模型
    • HQL类SQL语法,简化MR开发
    • 支持在不同的计算框架上运行
    • 支持在HDFS和HBase上临时查询数据
    • 支持用户自定义函数、格式
    • 成熟的JDBC和ODBC驱动程序,用于ETL和BI
    • 稳定可靠(真实生产环境)的批处理
    • 有庞大活跃的社区

    二.Hive架构

    hive的体系结构可以分成以下几个部分

    1.用户接口

    CLI:即Shell命令行(Command Line Interface),采用交互形式使用Hive命令行与Hive进行交互

    JDBC/ODBC:是Hive的基于JDBC操作提供的客户端,用户通过这连接至Hive sever服务

    Web UI:通过浏览器访问Hive

    2.跨语言服务

    ​ Thrift是Facebook开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,

    能让不同的编程语言调用Hive的接口。

    3.底层的Driver

    驱动器Driver,编译器Compiler,优化器Optimizer,执行器Executor,Driver组件完成HQL查询语句从语法分析,语法分析,编译,优化,以及生产逻辑执行计划的生成。生成的逻辑之和星计划存储在HDFS中,并随后又MapReduce调用执行。

    Hive的核心是驱动引擎,驱动引擎又四个部分组成:

    (1)解释器:将HiveSQL语句转换为抽象语法树(AST)

    (2)编译器:是将语法树编译成逻辑执行计划

    (3)优化器:优化器是对逻辑执行计划进行优化

    (4)执行器:执行器是调用底层的运行框架执行逻辑执行计划

    4.元数据存储系统

    元数据存储在Hive中的数据的描述信息,HCatalog:将Hive元数据共享给其他应用程序

    Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录

    Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存 储目录不固定。数据库跟着 Hive 走,极度不方便管理。

    实际生产一般存储在MySQL中,修改配置文件hive-site.xml

    5.执行流程

    ​ HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数 据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。

    三.Hive数据存储模型

    Hive中所有的数据都在存储HDFS中,没有专门的数据存储格式;只需要在创建表的适合告诉hive数据中的列分隔符和行分隔符,hive就可以解析数据

    在这里插入图片描述

    hive中的数据模型:

    (1)db:在HDFS中表现为:${hive.metastore.warehouse.dir}目录下的一个文件夹。

    (2)table:在HDFS表现为所属db目录下的一个文件夹

    (3)external table:与table类似,但其数据存放位置可以在任意位置指定路径

    (4)partition:在HDFS中表现为table目录下的子目录

    (5)bucket:在HDDFS中表现为同一个表目录下根据hash散列之后的多个文件。

    在这里插入图片描述

    四.数据类型

    1.基本数据类型

    类型 描述 示例
    boolean true/false TRUE
    tinyint 1字节的有符号整数 -128~127 1Y
    smallint 2个字节的有符号整数,-32768~32767 1S
    int 4个字节的带符号整数 1
    bigint 8字节带符号整数 1L
    float 4字节单精度浮点数 1.0
    double 8字节双精度浮点数 1.0
    deicimal 任意精度的带符号小数 1.0
    String 字符串,变长 “a”,’b’
    varchar 变长字符串 “a”,’b’
    char 固定长度字符串 “a”,’b’
    binary 字节数组 无法表示
    timestamp 时间戳,纳秒精度 122327493795
    date 日期 ‘2018-04-07’

    2.复杂数据类型

    类型 描述 示例
    array 有序的的同类型的集合 array(1,2)
    map key-value,key必须为原始类型,value可以任意类型 map(‘a’,1,’b’,2)
    struct 字段集合,类型可以不同 struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)

    示例建表

    (1)有表数据文件employee.txt如下

    Michael|Montreal,Toronto|Male,30|DB:80|Product:DeveloperLead
    Will|Montreal|Male,35|Perl:85|Product:Lead,Test:Lead
    Shelley|New York|Female,27|Python:80|Test:Lead,COE:Architect
    Lucy|Vancouver|Female,57|Sales:89|Sales:Lead
    

    (2)建表employee

    create table employee(
    name string,
    address array<string>,
    personaInfo array<string>,
    technol map<string,int>,
    jobs map<string,string>)
    row format delimited
    fields terminated by '|'             #列分隔符
    collection items terminated by ','   #map struct和array的分隔符
    map keys terminated by ':'           #MAP中的key与value的分隔符
    lines terminated by '\n';            #行分隔符
    

    (3)上传表

     hdfs dfs -put /root/employee.txt /opt/hive/warehouse/employee/
    

    (4)访问数据

    hive> select * from employee;
    OK
    Michael ["Montreal","Toronto"]  ["Male","30"]   {"DB":80}       {"Product":"Developer\u0004Lead"}
    Will    ["Montreal"]    ["Male","35"]   {"Perl":85}     {"Product":"Lead","Test":"Lead"}
    Shelley ["New York"]    ["Female","27"] {"Python":80}   {"Test":"Lead","COE":"Architect"}
    Lucy    ["Vancouver"]   ["Female","57"] {"Sales":89}    {"Sales":"Lead"}
    Time taken: 0.037 seconds, Fetched: 4 row(s)
    
    

    访问列数据

    hive> select name,address[0],personaInfo[0],technol["Sales"] from employee;
    OK
    Michael Montreal        Male    NULL
    Will    Montreal        Male    NULL
    Shelley New York        Female  NULL
    Lucy    Vancouver       Female  89
    Michael 100     Montreal        NULL
    Will    101     Montreal        NULL
    Steven  102     New York        NULL
    Lucy    103     Vancouver       NULL
    Mike    104     Montreal        NULL
    Shelley 105     New York        NULL
    Luly    106     Vancouver       NULL
    Lily    107     Montreal        NULL
    Shell   108     New York        NULL
    Mich    109     Vancouver       NULL
    Dayong  110     Montreal        NULL
    Sara    111     New York        NULL
    Roman   112     Vancouver       NULL
    Christine       113     Montreal        NULL
    Eman    114     New York        NULL
    Alex    115     Vancouver       NULL
    Alan    116     Montreal        NULL
    Andy    117     New York        NULL
    Ryan    118     Vancouver       NULL
    Rome    119     Montreal        NULL
    Lym     120     New York        NULL
    Linm    121     Vancouver       NULL
    Dach    122     Montreal        NULL
    Ilon    123     New York        NULL
    Elaine  124     Vancouver       NULL
    Time taken: 0.292 seconds, Fetched: 29 row(s)
    

    修改表结构

    将personinfo改成info struct<gender:string,age:int>

    hive> alter table employee change personainfo info struct<gender:string,age:int>
        > ;
    OK
    Time taken: 0.171 seconds
    
    #再次查看
    hive> select * from employee;
    OK
    Michael ["Montreal","Toronto"]  {"gender":"Male","age":30}      {"DB":80}       {"Product":"Developer\u0004Lead"}
    Will    ["Montreal"]    {"gender":"Male","age":35}      {"Perl":85}     {"Product":"Lead","Test":"Lead"}
    Shelley ["New York"]    {"gender":"Female","age":27}    {"Python":80}   {"Test":"Lead","COE":"Architect"}
    Lucy    ["Vancouver"]   {"gender":"Female","age":57}    {"Sales":89}    {"Sales":"Lead"}
    Time taken: 0.06 seconds, Fetched: 4 row(s)
    
    insert into employee_partition
    values('qingniao'|'nanjing'|'gender':'male'|'age':21|'hadoop':15|'hive':'important') 
    partition(country='china',add='nanjing')
    

    五.Hive操作

    1.Hive DDL

    (1)创建库

    CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
    [COMMENT database_comment]      --关于数据块的描述
    [LOCATION hdfs_path]          --指定数据库在HDFS上的存储位置
    [WITH DBPROPERTIES (property_name=property_value, ...)];    --指定数据块属性
    

    注:默认创建地址是你在/opt/hive/conf/hive-site.xml文件中进行配置的

    <property>
          <name>hive.metastore.warehouse.dir</name>
          <value>/opt/hive/warehouse</value>
    </property>
    
    

    1)创建普通的数据库

    hive> create database t1;
    OK
    Time taken: 0.037 seconds
    hive> show databases;
    OK
    default
    t1
    test
    Time taken: 0.018 seconds, Fetched: 3 row(s)
    
    

    2)创建库的时候检查存与否

    hive> create database if not exists t1;
    OK
    Time taken: 0.007 seconds
    hive> show databases;
    OK
    default
    t1
    test
    Time taken: 0.018 seconds, Fetched: 3 row(s)
    

    3)创建库的时候带注释

    hive> create database if not exists t2 comment 'learning hive';
    OK
    Time taken: 0.028 seconds
    hive> desc database t2;
    OK
    t2      learning hive   hdfs://192.168.36.100:9000/opt/hive/warehouse/t2.db     root    USER
    Time taken: 0.021 seconds, Fetched: 1 row(s)
    

    4)创建带属性的库

     create database if not exists t3 with dbproperties('creator'='hadoop','date'='2018-04-05');
    

    (2)查看库

    1)查看数据库

    hive> show databases;
    OK
    default
    t1
    t2
    test
    Time taken: 0.015 seconds, Fetched: 4 row(s)
    

    2)显示数据库的详细属性信息

    hive> desc database extended t2;
    OK
    t2      learning hive   hdfs://192.168.36.100:9000/opt/hive/warehouse/t2.db     root    USER
    Time taken: 0.023 seconds, Fetched: 1 row(s)
    
    

    3)查看正在使用的哪一个库

    hive> select current_database();
    OK
    default
    Time taken: 0.016 seconds, Fetched: 1 row(s)
    

    (3)删除库

    删除库操作drop database [if exists] dbname

    默认情况下,hive不允许删除包含表的数据库,一般手动删除库下所有表再删除库;或者使用cascade关键字**drop database if exists dbname cascade;**

    1)删除不含表的数据库

    hive> show databases;
    OK
    default
    t1
    t2
    test
    Time taken: 0.013 seconds, Fetched: 4 row(s)
    hive> show tables in t1;
    OK
    Time taken: 0.02 seconds
    hive> drop database t1;
    OK
    Time taken: 0.053 seconds
    hive> show databases;
    OK
    default
    t2
    test
    Time taken: 0.009 seconds, Fetched: 3 row(s)
    
    

    2)删除含有表的数据库

    hive> show tables in t2;
    OK
    pp
    Time taken: 0.014 seconds, Fetched: 1 row(s)
    hive> drop database t2 cascade;
    OK
    Time taken: 0.078 seconds
    hive> show tables in t2;
    FAILED: SemanticException [Error 10072]: Database does not exist: t2
    

    (4)切换库use database_name

    hive> use t2;
    OK
    Time taken: 0.009 seconds
    

    (5)修改库

    用户可以使用alter database 命令为某个数据库的dbproperties设置键=值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息是不可更改的,包括数据库名和数据库所在的目录位置。

    hive> alter database t1 set dbproperties('createtime'='20200917');
    OK
    Time taken: 0.026 seconds
    hive> desc database extended t1;
    OK
    t1              hdfs://192.168.36.100:9000/opt/hive/warehouse/t1.db     root    USER    {createtime=20200917}
    
    

    (6)创建表

    create [tempporary][external] table [if not exists][db_name.]table.name
    [(col_name data_type[COMMENT col_comment],...)]
    [comment table_comment]
    [partitioned by (col_name data_type[comment col_comment],...)]
    [clustered by (col_name,col_name,...)[sorted by(col_name[ASC|DESC],...)]into num_buckets buckets]
    [skewed by(col_name,col_name,...)] on((col_value,col_value,...),(col_value,col_value,...),...)
    [stored as directories][
        [row format row_format]
        [stored as file_format]
        [stored by 'storage.handler.class.name'][with serdeproperties(...)]]
    [location hdfs_path] --指定数据库在HDFS的存储位置
    [telproperties(property_name=property_value,...)]
    [as select_statement];   
    

    创建表语句说明:

    1)create table创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常;

    2)external可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION);

    注:Hive在创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

    3)like允许用户复制现有的表结构,但是不复制数据。

    4)comment注释

    5)partitioned by指定分区

    6)row format

    row format delimited
    [fields terminated by '']
    [collection items terminated by '']
    [map keys terminated by '']
    [lines terminated by '']
    |serde serde_name
    [with serdeproperties(property_name=property_value,property_name=property_value,...)]
    

    用户在建表的时候可以自定义SerDe或者使用自带的SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。

    7)stored as

    sequencefile --序列化文件

    textfile–普通的文本文件格式

    rcfile–行列存储相结合的文件

    inputformat input_format_classname OUTPUTFORMAT output_format_classname //自定义文件格式

    如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。

    8)**location:**指定外部表在HDFS的存储路径

    示例

    1)创建默认内部表

    hive> create table student(id int,name string,sex string,age int,department string)
        > row format delimited
        > fields terminated by ',';
    OK
    Time taken: 0.062 seconds
    hive> desc student;
    OK
    id                      int
    name                    string
    sex                     string
    age                     int
    department              string
    Time taken: 0.073 seconds, Fetched: 5 row(s)
    

    2)外部表

    hive> create  external table ext_student(id int,name string,sex string,age int,department string)
        > row format delimited
        > fields terminated by ','
        > location '/hive/student';  --指定外部表实际数据的路径
    OK
    Time taken: 0.041 seconds 
    

    3)分区表

    hive> create  external table par_student(id int,name string,sex string,age int,department string)
        > partitioned by (city string)
        > row format delimited
        > fields terminated by ','
        > location '/hive/student_ptn';
    OK
    Time taken: 0.05 seconds
    
    #添加分区
    hive> alter table par_student add partition(city="beijing");
    OK
    Time taken: 0.095 seconds
    hive> alter table par_student add partition(city="nanjing");
    OK
    Time taken: 0.084 seconds
    

    在这里插入图片描述

    4)分桶表

    hive> create  external table bck_student(id int,name string,sex string,age int,department string)
        > clustered by (id) sorted by (id asc,name desc) into 4 buckets
        > row format delimited fields terminated by ","
        > location "/hive/student_bck";
    OK
    Time taken: 0.034 seconds
    
    

    5)使用CATS创建表

    # 向student表中导入数据
    hive> load data local inpath "/home/hadoop/student.txt" into table student;
    # 使用CTAS创建表
    hive>create table student_ctas as select * from student where id < 95012;
    

    6)复制表结构

    create table student_copy like student;
    

    注意:

    如果在table的前面没有加external关键字,那么复制出来的新表。无论如何都是内部表
    如果在table的前面有加external关键字,那么复制出来的新表。无论如何都是外部表

    (7)查看表

    1)查看表列表

    --查看当前使用的数据库中有哪些表
    show tables;
    --查看非当前使用的数据库中有哪些表
    show tables in mylive;
    --查看数据库中以xxx开头的表
    show tables like 'student_c*';
    

    2)查看表的详细信息

    --查看表信息
    desc student;
    --查看表的详细信息
    desc extended student; --格式不友好
    desc formatted student; --格式友好
    --查看分区信息
    show partitions student_ptn;
    

    3)查看表的详细建表语句

    show create table student_ptn;
    

    (8)修改表

    (1)修改表名

    alter table student rename to new_student;
    

    (2)修改字段定义

    --增加一个字段
    alter table new_student add columns(score int);
    --修改一个字段的定义
    alter table new_student change name new_name string;
    --不支持删除一个字段
    --替换所有字段
    alter table new_student replace columns(in int,name string, address string);
    

    (3)修改分区信息

    --添加分区.
    alter table student_ptn add partition(city="chongqing") partition(city="chongqing2") partition(city="chongqing3");
    --动态分区
    load data local inpath "/home/hadoop/student.txt" into table student_ptn partition(city="beijing"); --向student_ptn表中插入数据
    
    create table student_ptn_age(id int,name string,sex string,department string) partitioned by (age int);--创建student_ptn_age并指定分区为age
    
    insert overwrite table student_ptn_age partition(age)select id,name,sex,department,age from student_ptn;--student_ptn表中查询数据并插入student_ptn_age表中
    
    --修改分区,一般来说,都是指修改分区的数据存储目录
    alter table student_ptn add if not exists partition(city='beijing') location '/student_ptn_beijing' partition(city='cc') location '/student_cc';--在添加分区的时候,直接指定当前分区的数据存储目录
    alter table student_ptn partition (city='beijing') set location '/student_ptn_beijing';
    
    --删除分区
    alter table student_ptn drop partition (city='beijing');
    

    (9)删除表

    drop table new_student;
    

    (10)清空表

    truncate table student_ptn;
    

    2.Hive DML

    (1)load

    语法结构

    load data [local] inpath 'filepath' [overwrite] into
    table tablename [partition(partcol1=val1,partcol2=val2...)]
    

    语法说明:

    1)filepath

    相对路径,project/data1

    绝对路径 /user/hive/project/data1

    2)local关键字

    指定local关键字,load命令会1去查找本地文件系统中的filepath。

    没有指定local,则会根据inpath中的uri查找文件

    3)overwriter关键字

    表示覆盖表中已有数据,否则表示追加

    4)partition

    表示上传到指定分区

    示例

    --加载本地文件到hive表
    load data local inpath '/home/hadoop/data/emp.txt' into table emp;
    --加载HDFS文件到hive表
    hdfs dfs -put emp.txt /data/hive
    load data inpath '/data/hive/emp.txt' into table emp;
    load data inpath 'data/hive/emp.txt' overwrite into table emp;--覆盖表中已有的数据
    --加载数据到hive表中
    load data local inpath '/home/hadoop/data/order.txt'overwrite into table order_partition partition(event_month='2014-05');
    

    (2)insert

    语法结构

    insert overwrite table tablename1 [partition(partcl1=val1,partctl2=val2...)]select_statement from from_statement
    --多insert插入
    from from_statement 
    insert overwrite tablename1[partition(partcol1=val1,partcol2=val2...)]select_statement1
    [insert overwrite tablename2[partition...]select_statement2 ]...
    --动态分区插入
    insert overwrite table tablename partition(partcol1[=val1],partcol2[=val2]...)select_statement from from_statement
    

    示例

    --基本插入数据
    insert into table student partition(month='201709') values('1004','wangwu');
    --多插入模式
    from student
    insert overwrite table student partition(month='201707')
    select id, name where month='201709'
    insert overwrite table student partition(month='201706')
    select id, name where month='201709';
    --使用insert将查询的结果写入hive表中
    create table emp2 as select empno,empname,job,deptno from emp;
    --使用insert将结果写入到hive分区
    insert into table order_artition partition(event_month='2014-07')select * from order_4_partition;
    

    (3)数据导出

    将hive的表中的数据导出到文件系统

    语法结构;

    insert overwrite [local] directory directory1 select ... from ...
    

    示例

    --将查询的结果导出到本地
    insert overwrite local directory '/opt/data/student' 
    row format delimited
    fields terminated by '\t'
    collection items terminated by '\n'
    select * from student;
    --将查询的结果导到HDFS
    insert overwrite directory '/hive/' select * from emp;
    
    

    (4)select

    基本查询语法

    select[all|distinct]select_expr,select_expr,...
    from table_reference
    [where where_condition]
    [group by col_list [having condition]]
    [cluster by col_list | [distribute by col_list][sort by|order by co_list]]
    [limit number]
    

    说明:

    1)order by 会对输入做全局排序,因此只有一个reducer,会导致输入规模较大时,需要较长的计算时间。

    2)sort by 不是全局排序,其在数据进入reducer前完成排序,所以sort by 只保证每个reduce的输出有序,不保证全局有序。

    3)distribute by 根据指定内容将数据分到同一个reduce

    4)cluster by 除了具有对distribute by的功能外,还会对该字段进行排序。

    --全表查询,指定字段查询
    select * from emp;
    select empno, ename,from emp;
    --条件过滤
    --等值过滤
    select * from emp where empno=100;
    -->= <=过滤
    select * from emp where empno>=100;
    --between and 过滤
    select * from emp where empno between 90 and 100;
    --limit控制结果记录条数
    select * from emp limit 4;
    --in/not in
    select * from emp where empno in(100,200,300);
    --is/not null
    select ename from emp where empno is null;
    --聚合函数 max/min/count/sum/avg
    select count(*) from emp where deptno=10;--查询部门编号为10的部门员工数
    select max(sal),min(sal),sum(sal),avg(sal) from emp;--最高工资,最低工资,总工资,平均工资
    select deptno,avg(sal) from emp group by deptno;--求每个部门的平均工资
    select deptno,job,max(sal)from emp group by deptno,job;--求每个部门,工作岗位的最高工资
    select avg(sal),deptno from emp group by deptno having avg(sal)>2000;--求每个部门的平均薪水大于2000的部门
    --case when then
    select ename,sal case
    when sal>1 and sal<=1000 then'lower'
    when sal>1000 and sal<=2000 then'middle'
    when sal>2000 and sal<=4000 then'high'
    else 'highest'end
    from emp;
    

    (5)join

    多表关联查询

    语法

    join table:
    table_reference join table_factor[join_condition]
    |table_reference {left|right|full}[outer]join table_reference join_condition
    |table_reference left semi join table_reference join_condition
    

    注:hive不支持非等值连接

    1)只支持等值join

    select a.* from a join b on(a.id=b.id);
    select a.* from a join b on(a.id>b,id);--这是错的,不支持非等值连接
    

    2)可以join多于两个的表

    select a.val,b.val,c.val from a join b on(a.key=b.key1)join c on(c.key=b.key2)
    
    展开全文
  • 3.1 首先要了解一下,针式PKM 的基本功能 和 操作 针式PKM主要由主界面和知识点 两画面组成, 主界面粗看上像很杂,实际上分作有规律的几块,是为了帮助您更快的完成日常操作。 可以先看看帮助视频,然后...
  • 公司信息设置:点击主窗口左侧的"系统设置" →"公司信息"按钮,打开公司信息窗口,在此处输入公司的基本信息,在招贴单中可以显示公司信息,也为以后功能升级需要显示公司信息的地方做好准备。 2. 员工管理:点击...
  • <p><code>webpack</code> 有几重要的属性:<code>entry、<code>module、<code>output、<code>plugins</code>,在这里我还没使用到插件,所以没有配置 <code>plugins</code> 。 <p><code>module...
  • 表单基本工作方式都是用户填写信息然后单击按钮提交,浏览器手机输入的信息,并将其发送给Web服务器。 传统表单 form元素用来组织表单部件,负责告诉浏览器数据提交到,方法是在action中提供一URL 表单控件里面...
  •  声明方法存在而不去实现它类被叫做抽象类(abstract class),它用于要创建一体现某些基本行为类,并为该类声明方法,但不能在该类中实现该类情况。不能创建abstract 类实例。然而可以创建一变量,...
  • input表单

    2019-09-18 20:31:14
    表单目的:收集用户信息 HTML中,一个完整表单包括三个部分: ...type属性为其最基本的属性类型,说明了属于种表单 radio 如果是一组,我们必须给他们命名相同名字,如下图。 结果...
  • Opencv task2

    2021-02-22 18:34:34
    所以储存信息为H\S\V三个属性多对应数值。 ######可以根据像素行和列坐标获取他像素值。对 BGR 图像而言,返回 值为 B,G,R 值。对灰度图像而言,会返回他灰度值 有时需要对一幅图像特定区域进行操作
  • 问题1-16:在教材1.5.2节提到协议有三个要素,即语法、语义和同步。语义是否已经包括了同步意思? 问题1-17:为什么协议不能设计成100%可靠? 问题1-18:什么是因特网穆尔定律? 问题1-19:局域网、广域网和...
  • 电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。 数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功 能,从而提高系统可靠性和速度。 集成电路的类型很多,从大的方面可以...
  • 6.13 实现第三个双向接口 6.14 创建C++双向接口客户机程序 6.15 创建Visual Basic客户机程序 6.15.1 后绑定 6.15.2 前绑定 6.16 小结 第七章 事件和连接点 7.1 接口回调 7.2 引入和引出接口 7.2.1 Advise...
  • Python-异常处理

    2020-08-10 18:39:15
    帅兰1、什么是异常处理2、异常处理 1、什么是异常处理 异常是错误发生信号,一旦程序出错就会...AttributeError 试图访问一对象没有的属性,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打
  • 匈牙利命名法

    2018-07-02 10:59:40
    匈牙利命名法 匈牙利命名法是一名匈牙利程序员发明,...即一变量名是由部分信息组成,这样,程序员很容易理解变量类型、用途,而且便于记忆。 下边是一些推荐使用规则例子,你可以挑选使用,也可以根据...
  • 使用一个XML文档(SpyBase1.xml)来描述其中包含所有信息基本保持原有数据形式(不要将三个表中数据进行嵌套)。请使用XML文档Grid视图完成该文档编写(需使用Grid视图中提供表操作工具条),并验证...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    传统的手工方式对图书信息的管理已越来越不能适应社会发展的需要,尤其是随着计算机网络和Internet的普及,运用先进的信息管理系统对信息进行科学化和网络化管理,已成为图书信息管理系统发展的趋势。 系统的研发...
  • java 面试题 总结

    2009-09-16 08:45:34
    声明方法存在而不去实现它类被叫做抽象类(abstract class),它用于要创建一体现某些基本行为类,并为该类声明方法,但不能在该类中实现该类情况。不能创建abstract 类实例。然而可以创建一变量,其...
  • Spring面试题

    2015-05-06 07:19:39
    spring 优点? 1.降低了组件之间耦合性 ,实现了软件各层之间解耦 ...以下清单显示了三个服务应用程序接口。 清单 3. CreditRatingInterface public interface CreditRatingInterface { ...
  • 2.1.2 描述实时系统的基本特性 2.1.3 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 2.1.4 什么是平衡二叉树? 2.1.5 堆栈溢出一般是由什么原因导致的? 2.1.6 什么函数不能声明为虚函数? ...
  • 是,Linux 上有公认 C 语言世界最好编译器 gcc,如果你想得到一效率更高开 发环境(并不一定是最友好,但一定是最强大),我建议你一定要好好熟悉一下 Linux。 .如何得到Linux? 据我所知...
  • flash shiti

    2014-03-14 10:32:41
    11. 全等(===)运算符和相同运算符基本相似,但是它们有一很重要区别 □ A. 全等(===)运算符执行数据类型转换 □ B. 全等(===)运算符不执行数据类型转换 □ C. 全等(===)运算符永远返回...
  • ExtAspNet_v2.3.2_dll

    2010-09-29 14:37:08
    -MenuButton, LinkButton, Button, LinkButtonFieldConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 -Confirm.GetShowReference最后一个参数target变为枚举类型。 -Alert....
  • -MenuButton, LinkButton, Button, LinkButtonFieldConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 -Confirm.GetShowReference最后一个参数target变为枚举类型。 -Alert....
  • (2) 模拟和分析需求 需求分析和模拟又包含三个层次工作。首先是需求建模。需求模型表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。需求概念模型要求包括实现独立性:不模拟数据...
  • 转 匈牙利命名法

    2007-09-26 10:17:00
    这种命名法的基本原则是:变量名=属性+类型+对象描述即一变量名是由部分信息组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。下边是一些推荐使用的规则例子,你可以挑选使用,也可以根据
  • 附录 匈牙利命名法

    2006-07-19 18:19:00
    这种命名法的基本原则是:变量名=属性+类型+对象描述即一变量名是由部分信息组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。下边是一些推荐使用的规则例子,你可以挑选使
  • JAVA面试题最全集

    2010-03-13 13:09:10
    84.dotnet由个基本框架组成? 85.Oracle中SGA是什么? 86.web servers是什么? 87.UNIX中QT是什么意思? 88.在软件开发生命周期中哪个阶段开始测试? 89.dotnet与J2EE比较? 90.什么是ActiveX? 91.Java中...

空空如也

空空如也

1 2 3 4 5
收藏数 93
精华内容 37
关键字:

信息的基本属性哪三个