执行后,会把指定表中记录数据导出到c:/test.csv文件中。每个字段以,(逗号)分隔,字段内容是字符串的以”(双引号)包围,每条记录使用\r\n换行。如图所示
Hive可以管理HDFS中的数据,可以通过SQL语句可以实现与MapReduce类似的同能,因为Hive底层的实现就是通过调度MapReduce来实现的,只是进行了包装,对用户不可见。 Hive对HDFS的支持只是在HDFS中创建了几层目录,正真的数据存在在MySql中,MYSQL中保存了Hive的表定义,用户不必关系MySQL中的定义,该层对用户不可见。Hive中的库在HDFS中对应一层目录,表在HDFS中亦对应一层目录,如果在对应的表目录下放置与表定义相匹配的数据,即可通过Hive实现对数据的可视化及查询等功能 综上所述,Hive实现了对HDFS的管理,通过MySQL实现了对HDFS数据的维度管理 Hive基本功能及概念 database table 外部表,内部表,分区表 Hive安装 1. MySql的安装(密码修改,远程用户登陆权限修改) 2. Hive安装获取,修改配置文件(HADOOP_HOME的修改,MySQL的修改) 3. 启动HDFS和YARN(MapReduce),启动Hive Hive基本语法: 1. 创建库:create database dbname 2. 创建表:create table tbname Hive操作: 1. Hive 命令行交互式 2. 运行HiveServer2服务,客户端 beeline 访问交互式运行 3. Beeline 脚本化运行 3.1 直接在 命令行模式下 输入脚本命令执行(比较繁琐,容易出错,不好归档) 3.2 单独保存SQL 命令到 文件,如etl.sql ,然后通过Beeline命令执行脚本 数据导入: 1. 本地数据导入到 Hive表 load data local inpath "" into table .. 2. HDFS导入数据到 Hive表 load data inpath "" into table .. 3. 直接在Hive表目录创建数据 Hive表类型: 1. 内部表: create table 表数据在表目录下,对表的删除会导致表目录下的数据丢失,需要定义表数据的分隔符。 2. 外部表: create external table 表目录下挂载表数据,表数据存储在其他HDFS目录上,需要定义表数据的分隔符。 3. 分区表:与创建内部表相同,需要定义分区字段及表数据的分隔符。在导入数据时需要分区字段,然后会在表目录下会按照分区字段自动生成分区表,同样也是按照目录来管理,每个分区都是单独目录,目录下挂载数据文件。 4. CTAS建表 HQL 1. 单行操作:array,contain等 2. 聚合操作:(max,count,sum)等 3. 内连接,外连接(左外,右外,全外) 4. 分组聚合 groupby 5. 查询 : 基本查询,条件查询,关联查询 6. 子查询: 当前数据源来源于 另个数据执行的结果,即当前 table 为临时数据结果 7. 内置函数: 转换, 字符串, 函数 转换:字符与整形,字符与时间, 字符串:切割,合并, 函数:contain,max/min,sum, 8. 复合类型 map(key,value)指定字符分隔符与KV分隔符 array(value)指定字符分隔符 struct(name,value) 指定字符分割与nv分隔符 9. 窗口分析函数 10. Hive对Json的支持
查询来的数据没发现有什么异常;照理说逐字段查出来没问题,再逐字段插入应该不会错位。实际上 hive 的 insert 跟想象中传统的 insert 不太一样。
import工具从RDBMS向HDFS导入单独的表。表格中的每一行都表示为HDFS中的单独记录。记录可以存储为文本文件(每行一个记录),或以Avro或SequenceFiles的二进制表示形式存储。
一、数据导入 1.什么是导入:把系统文件的内容保存到数据库服务器的表里 2.导入数据时的注意事项? -表中字段的个数要和文件列中的个数相等 -字段的类型要和文件中列的值匹配 3.导入数据命令格式: load data infile '文件名' into table 表名 fields terminated by '分隔符' lines terminated by '\n'; *terminated by ‘分隔符’:指定列的分隔符 *lines terminated by
一、MySQL中字符串的截取 MySQL中有专门的字符串截取函数:其中常用的有两种:substring_index(str,delim,count) 和concat 1.substring_index(str,delim,count) 函数的使用较为普遍。 函数括号里面的依次为:要分隔截取的字符串(如:”aaa_bbb_ccc”)、分隔符(如:“_”)、位置(表示第几个分隔符处,如:“1”)。 count为正数,那么就是从左边开始数,函数返回第count个分隔符的左侧的字符串; count为负数,那么就是从右边开始数,函数返回第count个分隔符右边的所有内容; count可以为0,返回为空。
小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL江湖路专栏目录 | 点击这里
常见的MySQL数据导出有三种形式 SELECT ... INTO OUTFILE ---- SELECT * FROM person INTO OUTFILE '/var/lib/mysql-files/person.data'; LOAD DATA INFILE LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作 常用选项 FIELDS TERMINATED BY ',':字段分隔符 ENCLOSED BY '"':包围字段的符号 LINES TER
今天我们来说一个MySQL查询的例子,比如有一个统计需求, 分组后的数据,我们知道只能使用聚合函数进行统计, 那如果要根据分组约定,将一系列的值合并到单个字段显示出来, 应该怎么写呢?
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
/ect/init.d/mysql start (前面为mysql的安装路径)
前些年,HandlerSocket的横空出世让人们眼前一亮,当时我还写了一篇文章介绍了其用法梗概,时至今日,由于种种原因,HandlerSocket并没有真正流行起来,不过庆幸的是MySQL官方受其启发,研发了基于InnoDB的Memcached插件,总算是在MySQL中延续了NoSQL的香火,以前单独架设Memcached服务器不仅浪费了内存,而且还必须自己维护数据的不一致问题,有了Memcached插件,这些问题都不存在了,而且借助MySQL本身的复制功能,我们可以说是变相的实现了Memcached的复制,这更是意外之喜。
修改会受到原有数据限制,如果原有数据不能满足新的数据类型,修改不会成功,会报错,超出范围 out of range
最近在做的业务场景涉及到了数据库的递归查询。我们公司用的 Oracle ,众所周知,Oracle 自带有递归查询的功能,所以实现起来特别简单。
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义 函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方 式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标 准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
在学习常用函数之前,先来学习一些数据库的基本操作,因为在自己试下面这些函数时,按照图片中的代码敲不一定对。有kali的同学可以在docker里做,而大部分同学是用ubuntu的,这个时候搭建的mysql里可能没有库没有表,那么就需要自己来建库建表来实践。不然没有建的话根本没东西,按下面的代码敲,就会报错。
本文选取一些mysql函数进行具体举例介绍,从功能、语法等多方面做个记录说明,附上执行截图
在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。
MySQL中如果对字段有拼接需求,可以利用原生提供的三个函数,功能虽然相近,但细节略有不同,针对不同的场景,选择不同的方案,
注意:返回结果为连接参数产生的字符串,如果有任何一个参数为 NULL,则返回值为 NULL。
说明:Linux pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。
将group by产生的同一个分组中的值连接起来,返回一个字符串结果。group_concat函数首先根据group by指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔。由函数参数(字段名)决定要返回的列。例如:
sqoop,即SQL To Hadop,目的是完成关系型数据库导入导出到Hadoop
本篇文章主要介绍了MySQL中concat函数的用法(连接字符串),在命令行模式下进行测试。
这里给大家列出来了一部分Sqoop操作时的常用参数,以供参考,需要深入学习的可以参看对应类的源代码。
一、字符串拆分: SUBSTRING_INDEX(str, delim, count)
sqoop-import introduction 导入的主要语法是 $ sqoop import (generic-args) (import-args) $ sqoop-import (generic-args) (import-args) 命令格式为: $ sqoop import --connect \ (连接字符) --username \ (用户名) --password [-P |--password-file]\ (单个密码或用文件形式,文件权限一般为400) --query \ (查
从concat()函数 — concat_ws()函数----到最后的group_concat()函数逐一讲解! 让小伙伴摸清楚其使用方法 !
从这一篇开始,大概会花四五篇的内容篇幅,归纳整理一下之前学过的SQL数据库,一来可以为接下来数据分析工作提前巩固基础,二来把以前学的SQL内容系统化、结构化。 今天这一篇仅涉及MySQL与本地文本文件的导入导出操作,暂不涉及主要查询语言以及MySQL与R语言和Python的交互。 平台使用Navicat Premium(当然你也可以使用MySQL自带的workbench或者MySQL Conmand line)。 以下仅涉及MySQL中使用命令行语句导入/导出本地磁盘的文本文件(csv\txt文件)。 文件
docker搭建环境 请自己安装好docker,然后使用ubuntu:14.04的镜像 docker pull ubuntu:14.04 以下是pcat提供的Dockerfile和start.sh,请把这2个文件放在同一个文件夹下 (如果不懂docker的话,可以借此机会学习学习下) Dockerfile: FROM ubuntu:14.04 MAINTAINER pcat@chamd5.org ENV REFRESHED_AT 2017-11-14 ENV LANG C.UTF-8 # chang
表在创建时,有分隔符属性,这个分隔符属性,代表在执行MR程序时,使用哪个分隔符去分割每行中的字段! 查看表(实际在HDFS中也是一个文件)中的所有内容(包括分隔符):
sqoop导出数据的时候遇到问题,ERROR tool.ExportTool: Error during export: Export job failed
假设我们现在建立一张student表,它有两个字段,id(int)和name(string)。
3、单击”文件”–“另存为”,类型选择为”CSV(逗号分隔)(*.csv)”,将excel表另存为csv文档。中间不管提示什么一律”是”就好了…
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
sql语法很多,是一门完整语言。这里仅仅实现一个功能,不做深入研究。 目标:定时更新表或者清空表。 案例:曾经做过定时清空位置信息表的任务。(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更新表字段+1 1.prepare 创建一个表: DROP TABLE IF EXISTS `test_sche`; CREATE TABLE `test_sche` ( `id` int(11) NOT NULL, `counts` int(11) DEFAULT NULL, PRIMARY KEY
该字段由3部分组成,分别对应ip, user, password,现在要使用sql将该字段拆分,代码如下:
GROUP_CONCAT 适用于拼接多条数据相同列,需要使用分割符的字符串查询结果.默认使用逗号作为分隔符 语法: 必须配合GROUP BY一起使用 GROUP_CONCAT(字段) GROUP_CONCAT(字段 separator "分隔符") GROUP_CONCAT(DISTINCT 字段 ORDER BY 字段 SEPARATOR "分隔符") 示例: SELECT employeeNumber, firstName, lastName, GROUP_CONC
有时我们需要查询某个字段是否包含某值时,通常用like进行模糊查询,但对于一些要求比较准确的查询时(例如:微信公众号的关键字回复匹配查询)就需要用到MySQL的 find_in_set()函数;
需求描述 实现的sql 案例演示 字符串拆分: SUBSTRING_INDEX(str, delim, count) 替换函数:replace( str, from_str, to_str) 获取字符串长度:LENGTH( str ) 实现的原理解析 实现sql 正式的原理解析 Step1:首先获取最后需被拆分成多少个字符串,利用 help_topic_id 来模拟遍历 第n个字符串。 Step2:根据“,”逗号来拆分字符串,此处利用 SUBSTRING_INDEX(str, delim, count) 函数,最后把结果赋值给 num 字段。 扩展:判断外部值是否在 num列值中 find_in_set instr 字符串转多列
6.使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
Hive 是由 Facebook 开源的基于 Hadoop 的数据仓库工具,用于解决海量「结构化日志」的数据统计。
无意间在简书上浏览的时候看到一篇写数据库查询的练习题,其实也好无奈,大数据啊大数据,自从看了几天有关编程和程序员方面的文章,首页推荐的内容都是关于这样的技术贴,太那啥了,想看点小故事小情感类的文章都要自己搜,好吧。今天没有小故事,可能会比较枯燥(毕竟数据库嘛)
目录 一、问题描述 二、定位原因 三、解决方案 1、建表分隔符和导入时的分隔符不一致 1.修改建表分隔符 2.建表时直接指定好分隔符 3.针对分区表和无分区表的区别 2、字段的数据类型不一致 3、文件类型和压缩格式不对(ORC、TEXTFILE...) 4、字段值包含了分隔符,可以换一个分隔符试试 ---- 一、问题描述 hive建表ddl: create table table_name( a bigint, b string ) comment 'xx表' partitioned by
Hive 提供标准的 SQL 功能,Hive 的 SQL 也可以通过用户定义的函数(UDF),用户定义的集合(UDAF)和用户定义的表函数(UDTF)扩展为用户代码。
又很久没有写博客了 这篇笔记是边学边记的 当时比较仓促 所以有的地方可能会比较乱 但是大概的方法写的还是比较清楚了 等有时间回头再好好整理一下这篇文章。
前面一篇已经介绍了MySQL 备份相关的原理与方法,要是还没有来得及看的可以戳此查看『MySQL 备份恢复(一)』,那么今天就接着上一篇的内容继续谈谈备份恢复相关内容。数据备份是 DBA 非常重要的工作之一,系统意外奔溃或者硬件损坏都可能导致数据库的数据丢失,因此 MySQL DBA 应该定期备份数据,使得意外发生时尽可能的减少损失。数据备份在工作中是重中之重,安全很重要。
上一篇文章 跨表更新,看到自己写的SQL像个憨憨 写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5
领取专属 10元无门槛券
手把手带您无忧上云