我可以在mysql
和hive(hdfs
上的hive)之间加入表吗?
有人告诉我它在mysql
和oracle之间有效。
示例:
SELECT a.* FROM a JOIN b ON (a.id = b.id)
a位于mysql
,当b位于hdfs
上的配置单元时。
我怎样才能让它发挥作用?
答案 0 :(得分:3)
不,你不能使用Hive将MySQL / Oracle中的表连接到HDFS中的表。
作为一种解决方法,您可以使用Sqoop将表格从MySQL / Oracle转移到Hive,然后在Hive中加入它们。
例如,如果你在MySQL中有一个名为a
的表,你可以使用Sqoop将表格变成hive,如下所示:
sqoop import --connect jdbc:mysql://localhost/yourDBName \
--username root -P \
--table a \
--hive-import \
--hive-table a \
-m 1
一旦导入完成,你可以加入两个表,假设b
是你在Hive中的另一个表:
SELECT a.* FROM a JOIN b ON (a.id = b.id)
答案 1 :(得分:3)
您可以使用Spark执行相同的操作
val mysqlDF = spark
.read
.jdbc(url, tablename, props)
val hiveDF = spark
.read
.table(tablename)
然后你可以加入那些DF并执行你的逻辑
您也可以将mysqlDF写入表格
mysqlDF.write.saveAsTable(tablename2)
您可以加入spark-sql cli spark-sql>
答案 2 :(得分:0)
评论可能为时已晚 - 但仍然如此: Presto具有此内置功能。它使用目录和模式来实现这一目标。
Presto允许查询它所在的数据,包括Hive,Cassandra,关系数据库甚至专有数据存储。单个Presto查询可以组合来自多个来源的数据,从而允许整个组织进行分析。