hive - 配置单元中的映射类型变量

标签 hive hiveql

我在尝试在 hive 中定义 map 类型时遇到问题。根据 Hive Manual肯定有一种 map 类型,不幸的是没有任何关于如何使用它的例子。 :-(

假设,我有一个包含以下列的表(用户):

Name     Ph    CategoryName

此“CategoryName”列具有一组特定的值。现在我想创建一个将 CategoryName 映射到 CategoryID 的哈希表。我试着做:
set hivevar:nameToID=map('A',1,'B',2); 

我有两个问题:
  • 当我这样做时 set hivevar:${nameToID['A']}我认为它会将值打印为 1。但我得到了
    “${hivevar:nameToID['A']} 未定义”
  • 我不知道该怎么说,select name, ph, ${nameToID[CategoryName]} from users
  • 最佳答案

    假设您有下表:

    describe test;
    name      string    
    ph        string    
    category  map<string,int>
    
    select * from test;
    name    ph  category
    Name1   ph1 {"type":1000,"color":200,"shape":610}
    Name2   ph2 {"type":2000,"color":200,"shape":150}
    Name3   ph3 {"type":3000,"color":700,"shape":167}
    

    访问 map 列:
    select ph, category["type"], category["color"] from test;
    ph1    1000    200
    ph2    2000    200
    ph3    3000    700
    

    使用 Hive 变量的等效项:
    set hivevar:nameToID=
       map("t", category["type"], "c", category["color"], "s", category["shape"]);
    
    select ph, ${nameToID}["t"], ${nameToID}["c"] from test;
    ph1    1000    200
    ph2    2000    200
    ph3    3000    700
    

    这适用于 Hive 0.9.0

    关于hive - 配置单元中的映射类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14514669/

    相关文章:

    sql - 为什么我不能在Hive中使用带有多个insert子句的高级聚合功能?

    hadoop - Cloudera Impala 使元数据无效

    python - 无法在运行时修改 mapred.job.name。它不在允许在运行时修改的参数列表中

    sql - CASE WHEN 从列创建 bin 的替代方案

    python - 如何将 HIVE 访问集成到派生自 pip 和 conda 的 PySpark(而不是来自 Spark 发行版或包)

    mysql - Sqoop将mysql表新添加的列导入到现有的hive表

    sql - 将 PL/SQL ETL 过程转换为 HiveQL

    hadoop - 如何将 Hive 表映射到 HBase?

    hadoop - 尝试运行配置单元查询时出现以下错误

    amazon-s3 - 子目录上的 S3 hive 外部表不起作用