教程:使用 ODBC 和 PowerShell 查询 Apache Hive

使用 Microsoft Azure ODBC 驱动程序可以灵活地与不同类型的数据源(包括 Apache Hive)进行交互。 可以采用 PowerShell 等脚本语言编写代码,以使用 ODBC 驱动程序打开与 Hive 群集的连接,传递所选的查询,并显示相应的结果。

在本教程中,你将执行以下任务:

  • 下载并安装 Microsoft Azure Hive ODBC 驱动程序
  • 创建链接到群集的 Apache Hive ODBC 数据源
  • 使用 PowerShell 从群集查询示例信息

如果没有 Azure 订阅,请在开始前创建一个试用版订阅

先决条件

要阅读本教程,必须具备以下项:

  • HDInsight 上的一个交互式查询群集。 要创建此群集,请参阅 Azure HDInsight 入门。 选择“交互式查询”作为群集类型。

安装 Microsoft Azure Hive ODBC 驱动程序

下载并安装 Microsoft Hive ODBC 驱动程序

创建 Apache Hive ODBC 数据源

下列步骤演示如何创建 Apache Hive ODBC 数据源。

  1. 从 Windows 中导航到“开始”>“Windows 管理工具”>“ODBC 数据源(32 位)/(64 位)。 此时将打开“ODBC 数据源管理员”窗口。

    ODBC 数据源管理器。

  2. 在”用户 DSN”选项卡中,选择“添加”,打开“创建新数据源”窗口 。

  3. 选择“Microsoft Hive ODBC 驱动程序”,然后选择“完成”,打开“Microsoft Hive ODBC 驱动程序 DSN 设置”窗口 。

  4. 键入或选择以下值:

    属性 说明
    数据源名称 为数据源提供名称
    主机 输入 CLUSTERNAME.azurehdinsight.cn。 例如: myHDICluster.azurehdinsight.cn
    端口 使用 443
    数据库 使用“默认”。
    机制 选择“Windows Azure HDInsight 服务”
    用户名 输入 HDInsight 群集 HTTP 用户的用户名。 默认用户名为 admin
    密码 输入 HDInsight 群集用户的密码。 选中复选框“保存密码(加密)”。
  5. 可选:选择“高级选项”。

    参数 说明
    使用本机查询 当此项处于选中状态时,ODBC 驱动程序不会尝试将 TSQL 转换为 HiveQL。 仅当你完全确定要提交纯 HiveQL 语句时才使用此选项。 连接 SQL Server 或 Azure SQL 数据库时,应将此项保留为未选中状态。
    每块提取的行数 提取大量记录时,可能需要调整此参数以确保最佳性能。
    默认字符串列长度、二进制列长度、十进制列小数位数 数据类型长度和精度可能会影响返回数据的方式。 由于精度损失和截断,这些语句可能会导致返回不正确的信息。

    高级 DSN 配置选项。

  6. 选择“测试”以测试数据源。 如果数据源配置正确,测试结果会显示“成功”。

  7. 选择“确定”以关闭“测试”窗口。

  8. 选择“确定”以关闭“Microsoft Hive ODBC 驱动程序 DSN 设置”窗口 。

  9. 选择“确定”以关闭“ODBC 数据源管理器”窗口 。

使用 PowerShell 查询数据

以下 PowerShell 脚本是一个使用 ODBC 查询 Hive 群集的函数。

function Get-ODBC-Data {

   param(
   [string]$query=$(throw 'query is required.'),
   [string]$dsn,  
   [PSCredential] $cred = (Get-Credential)  
   )

   $conn = New-Object System.Data.Odbc.OdbcConnection
   $uname = $cred.UserName

   $pswd = (New-Object System.Net.NetworkCredential -ArgumentList "", $cred.Password).Password
   $conn.ConnectionString = "DSN=$dsn;Uid=$uname;Pwd=$pswd;"
   $conn.open()
   $cmd = New-object System.Data.Odbc.OdbcCommand($query,$conn)

   $ds = New-Object system.Data.DataSet

   (New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($ds) #| out-null
   $conn.close()
   $ds.Tables
}

以下代码片段使用上述函数对你在本教程开头创建的交互式查询群集执行查询。 将 DATASOURCENAME 替换为已在“Microsoft Hive ODBC 驱动程序 DSN 设置”屏幕上指定的“数据源名称” 。 在系统提示输入凭据时,输入创建群集时在“群集登录用户名”和“群集登录密码”下输入的用户名和密码 。


$dsn = "DATASOURCENAME"

$query = "select count(distinct clientid) AS total_clients from hivesampletable"

Get-ODBC-Data -query $query -dsn $dsn

清理资源

如果不再需要资源组、HDInsight 群集和存储帐户,请将其删除。 为此,请选择已创建群集的资源组,然后单击“删除”。

后续步骤

本教程介绍了如何使用 Microsoft Azure Hive ODBC 驱动程序和 PowerShell 从 Azure HDInsight 交互式查询群集检索数据。