思想是通过调用hive -e命令,然后解析返回的结果。

以下的hive.lsp文件是一个样例,提供了读取本地hive数据库名称。表名,表结构和依据hive表的创建语句生成相应的MySQL的创建语句。

最新代码參考我在gitlab.com上的开源项目:

https://gitlab.com/newlisp/armory.git

;; hive.lsp

;; @module hive
;; @description hive module provides some features for manuplating local hive database
;; @note must make sure the hive env are correct
;; @location hive.lsp
;; @version 0.1.0
;; @author Dean Chen
;; @example
;; (load "/opt/newlisp_util/env.lsp")
;; (HIVE:show-dbs)
;; (HIVE:show-tables db-name)
;; (HIVE:show-create-table-statment db-name table-name) (context 'HIVE) ;; @syntax (HIVE:show-dbs)
(define (show-dbs)
(exec (format "hive -e 'show databases' 2>&1"))) ;; @syntax (HIVE:show-tables db-name)
(define (show-tables db-name)
(exec (format "hive -e 'use %s; show tables' 2>&1" db-name))) ;; @syntax (HIVE:describe-table db-name table-name)
(define (describe-table db-name table-name)
(exec (format "hive -e 'use %s; describe %s' 2>&1" db-name table-name))) ;; @syntax (HIVE:show-create-table db-name table-name)
(define (show-create-table db-name table-name)
(exec (format "hive -e 'use %s; show create table %s' 2>&1" db-name table-name))) ;; @syntax (HIVE:gen-mysql-create-table hive-db-name hive-table-name)
;; @note this method use list index to locate CREATE EXTERNAL statement
;; it could be improved later for getting more compatibilty
(define (gen-mysql-create-table db-name table-name)
(set 's-list (show-create-table db-name table-name))
(set 'header (replace "CREATE EXTERNAL" (s-list 6) "CREATE"))
(set 'mysql-create-table-statement "")
(set 'mysql-create-table-statement (append mysql-create-table-statement header))
(set 'body (slice s-list 7))
(catch (dolist (field body)
(if (regex "PARTITIONED BY" field)
(begin
(set 'sub-length (- (length mysql-create-table-statement) 1))
(set 'mysql-create-table-statement (slice mysql-create-table-statement 0 sub-length))
(throw mysql-create-table-statement))
(begin
(set 'column-list (parse field ","))
(dolist (column column-list)
(set 'column-name (parse (trim column) " "))
(if column-name
(begin
(set 'mysql-create-table-statement (append mysql-create-table-statement (column-name 0)))
(set 'mysql-create-table-statement (append mysql-create-table-statement " "))
(set 'mysql-create-table-statement (append mysql-create-table-statement (replace "string" (column-name 1) "varchar(1024)")))
(set 'mysql-create-table-statement (append mysql-create-table-statement ","))
)
)))))))

用newLISP读取Hive的元数据的更多相关文章

  1. SparkSQL读取Hive中的数据

    由于我Spark采用的是Cloudera公司的CDH,并且安装的时候是在线自动安装和部署的集群.最近在学习SparkSQL,看到SparkSQL on HIVE.下面主要是介绍一下如何通过SparkS ...

  2. 运用Mono.Cecil 反射读取.NET程序集元数据

    CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...

  3. CDH 集群机器上部署 Jupyter notebook 使用 Pyspark 读取 Hive 数据库

    开始直接在 CDH Pyspark 的环境里面运行 Ipython . spark = SparkSession \ .builder \ .master('yarn') \ .appName('md ...

  4. [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子

    [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子$ cat customers.txt 1 Ali us 2 Bsb ca 3 Carls mx $ hive h ...

  5. R语言读取Hive数据表

    R通过RJDBC包连接Hive 目前Hive集群是可以通过跳板机来访问 HiveServer, 将Hive 中的批量数据读入R环境,并进行后续的模型和算法运算. 1. 登录跳板机后需要首先在Linux ...

  6. 读取hive的表结构,生成带comment的视图建表语句

    ### 读取hive的表结构,生成带comment的视图建表语句 # 读取配置文件中的表并进行遍历 grep -v '^#' tablesFile|while read tableName do st ...

  7. 解决Spark读取Hive分区表出现Input path does not exist的问题

    假设这里出错的表为test表. 现象 Hive读取正常,不会报错,Spark读取就会出现: org.apache.hadoop.mapred.InvalidInputException: Input ...

  8. Exif.js 读取图像的元数据

    Exif.js 提供了 JavaScript 读取图像的原始数据的功能扩展,例如:拍照方向.相机设备型号.拍摄时间.ISO 感光度.GPS 地理位置等数据. 注意事项: EXIF 数据主要来自拍摄的照 ...

  9. spark2.1:读取hive中存储的多元组(string,double)失败

    这两天和同事一起在想着如何把一个表的记录减少,表记录包含了:objectid(主小区信息),gridid(归属栅格),height(高度),rsrp(主小区rsrp),n_objectid(邻区),n ...

随机推荐

  1. java web分享ppt大纲 -- servlet容器简介

    今天在公司分享了java web的ppt,把ppt大纲放在这里,希望可以帮助需要的人 servlet容器简介 定义 狭义上的,servlet容器为java Web应用提供运行时环境,负责管理servl ...

  2. js页面跳转 和 js打开新窗口 方法

    js页面跳转 和 js打开新窗口 方法 第一种: 第二种: 第三种: 第四种: 第五种: 1.在原来的窗体中直接跳转用 window.location.href="你所要跳转的页面" ...

  3. BZOJAC400题留念

    BZOJAC400题了...

  4. 5.4.1 RegExp实例属性

    RegExp的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息.        1.global:布尔值,表示是否设置了 g 标志.        2.ignoreCase:布尔值,表示 ...

  5. python函数abs()

    详解: 返回绝对值 参数可以是:负数.正数.浮点数或者长整形 实例: abs(-1.2) #返回 1.2 abs(1.2) #返回 1.2 abs(-11216.5) #返回 11216.5 abs( ...

  6. Git Version recovery command introduction - git reset

    reset命令有3种方式: git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息 git re ...

  7. LintCode-三数之和

    题目描述: 给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组. 注意事项 在三元组(a, b, c),要求a <= b <= c ...

  8. Mysql-udf-http 插件的安装与使用

      1. 在Linux系统上安装Mysql-udf-http ulimit -SHn wget http://curl.haxx.se/download/curl-7.21.1.tar.gz .tar ...

  9. Android应用--简、美音乐播放器增加音量控制

    Android应用--简.美音乐播放器增加音量控制 2013年6月26日简.美音乐播放器继续完善中.. 题外话:上一篇博客是在6月11号发的,那篇博客似乎有点问题,可能是因为代码结构有点乱的原因,很难 ...

  10. ArcGIS 10 许可配置

    问题描述:在配置ArcGIS许可时,出现了许可检查通过,而无法启动arcmap的问题. 许可诊断结果如下: -------- Diagnostics -------- FLEXnet diagnost ...