【问题标题】:Querying a HIVE Table from SQL Server 2016 or later从 SQL Server 2016 或更高版本查询 HIVE 表
【发布时间】:2018-01-03 20:34:19
【问题描述】:

我正在尝试从 SQL Server 查询我的 Hortonworks 集群 Hive 表。我的场景如下:

  • HDP 2.6、Ambari、HiveServer2
  • SQL Server 2016 企业版
  • 用于 HDP 中安全登录的 Kerberos 配置

我正在阅读 SQL Server 2016 中的 PolyBase 服务,我想是更高版本。但是,我意识到,根据documentation,此服务将在 SQL Server 中执行的功能是连接我的 HDFS 并基于此数据源重新创建外部表的桥梁。

否则,我期望像这样的查询 Hive 对象也将是 SQL Server 对象,例如链接服务器。

有人有示例或知道这在 SQL Server 和 Hive 中是否可行?

非常感谢

【问题讨论】:

    标签: sql-server hadoop hive hiveql


    【解决方案1】:

    Hive 更像是一个作业编译器,而不是一个数据库。这意味着您正在编写的每条 SQL 语句都将被转换为 Hadoop 的作业,发送到集群并在那里执行。从用户的角度来看,它看起来像查询表。

    已经提到的通过读取 HDFS 数据源并在 SQL Server 中重新创建它的方法是正确的。由于 Hive 和数据库服务器都是不同的技术,所以像链接服务器这样的东西在技术上对我来说似乎是不可能的。

    Hive 现在提供了一个 JDBC 接口,可以用来连接它。但即使使用 Hive JDBC,每个查询最终都将作为分布式计算的集群作业,在 HDFS 中的文件上运行,创建结果集并将其呈现给您。

    【讨论】:

      【解决方案2】:

      如果您想从 SQL 服务器查询 Hive,您可以下载 ODBC 驱动程序(Microsoft 或 Hortonsworks)并为 Hive 创建一个数据源名称 (DSN)。在 Advanced 选项中选中 Use Native Query。然后只需在 SQL 服务器中创建新的链接服务器,其数据源名称与 ODBC 驱动程序中的数据源名称相同。

      编写 openquery 类似:

      select top 100 * from 
          openquery(HadoopLinkedServer,
                    'column1, column2 from databaseInHadoop.tableInHadoop')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多