Hive UDF 用于选择除某些列之外的所有列

2024-01-14

HiveQL(以及一般的 SQL)中常见的查询构建模式是选择所有列(SELECT *)或明确指定的一组列(SELECT A, B, C)。 SQL 没有内置机制来选择除指定的一组列之外的所有列。

有多种机制可以排除某些列,如中所述这个问题 https://stackoverflow.com/questions/729197/sql-exclude-a-column-using-select-except-columna-from-tablea但没有一个自然适用于 HiveQL。 (例如,创建临时表的想法SELECT * then ALTER TABLE DROP它的一些专栏会在大数据环境中造成严重破坏。)

忽略关于选择除某些列之外的所有列是否是个好主意的意识形态讨论,这个问题是关于扩展 Hive 的这种功能的可能方法。

在 Hive 0.13.0 之前,SELECT 可以采用基于正则表达式的列,例如,property_.*在反引号引用的字符串内。 @invoketheshell 下面的答案引用了此功能,但它是有代价的,即当此功能启用时,Hive 无法接受其中包含非标准字符的列,例如,$foo or x/y。这就是 Hive 开发人员在 0.13.0 中默认关闭此行为的原因。我正在寻找适用于任何列名称的通用解决方案。

通用表生成 UDF (UDTF https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-CreatingCustomUDFs)当然可以做到这一点,因为它可以操纵模式 https://stackoverflow.com/questions/25982163/create-multiple-columns-from-single-hive-udf。由于我们不会生成新行,有没有办法使用简单的基于行的 UDF 来解决这个问题?

这似乎是一个常见问题,网上有很多帖子展示了如何针对各种数据库解决这个问题,但我还没有找到 Hive 的解决方案。有没有代码可以做到这一点?


您可以选择除基于正则表达式的规范中列出的列之外的每一列。这是通过排除查询列。见下文:

在 0.13.0 之前的 Hive 版本中,或者在 0.13.0 及更高版本中(如果配置属性 hive.support.quoted.identifiers 设置为 none),SELECT 语句可以采用基于正则表达式的列规范。

也就是说,您可以使用以下命令创建新表或视图,并且将返回除指定列之外的所有列:

hive.support.quoted.identifiers=none;    

drop table if       exists database.table_name;
create table if not exists database.table_name as
    select `(column_to_remove_1|...|column_to_remove_N)?+.+`
    from database.some_table
    where 
    --...
;

这将创建一个表,其中包含 some_table 中除名为 column_to_remove_1, ... 到 column_to_remove_N 的列之外的所有列。您也可以选择创建视图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive UDF 用于选择除某些列之外的所有列 的相关文章

随机推荐

  • Spring 表达式 (SpEL) - 舍入

    使用 SpEL 评估数学运算时是否有办法指定舍入精度 例如 ExpressionParser parser new SpelExpressionParser Expression exp parser parseExpression 2 3
  • Underscore.js - 获取唯一的属性值

    我最近才发现 underscore js 的强大功能 对方法仍然很陌生 我恳请建议 我如何从中得到 name Type 2 id 14 name Type 1 id 13 name Type 3 id 15 name Type 2 id 1
  • 有没有办法在 Javascript 中拥有/锁定 Enum 对象的唯一索引值? [复制]

    这个问题在这里已经有答案了 正在阅读 推荐方式 https stackoverflow com questions 287903 enums in javascript处理的枚举类型 https en wikipedia org wiki
  • Xcode 5.0.1 iOS 7.0.3 模拟器未启动

    我刚刚在 OSX Mavericks 上升级到 Xcode 5 0 1 并将 Xcode 升级到 5 0 1 当我尝试在 iOS 7 0 3 模拟器上启动应用程序时 模拟器无法启动 该应用程序将在 iOS 6 1 模拟器上启动 但 iOS
  • 嵌入式 C 中模运算符的替代方案? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 嵌入式 c 中是否有 运算符的替代方案 还有其他一些方法可以做到这一点 例如在 C 中使用 while 循环 但模运算符真的会降低微控
  • Symfony2:如何翻译表单类型中的自定义错误消息?

    我需要翻译我的表单类型中的错误消息 这是我的表单类型代码 class ReferFriendType extends AbstractType public function buildForm FormBuilder builder ar
  • 实体框架性能问题

    我在实体框架方面遇到了一个有趣的性能问题 我正在使用代码优先 这是我的实体的结构 一本书可以有很多评论 评论与一本书相关联 一篇评论可以有一个或多个评论 一条评论与一条评论相关联 public class Book public int B
  • 如何使用存储过程实现Gridview自定义分页?

    有人可以将我重定向到您自己的博客链接或任何其他链接 解释有关如何使用存储过程实现 gridview 自定义分页的完整教程吗 我在 google 中的搜索给了我 2006 年的旧文章 现在我正在使用 asp net 3 5 和 c aspx
  • Homestead Laravel 继续运行之前的版本

    我已按照以下步骤操作https laravel com docs 8 x homestead updating homestead https laravel com docs 8 x homestead updating homestea
  • 我的应用程序中的 Google 地图不可见

    当我启动我的应用程序时 出现以下错误 V GoogleSignatureVerifier 4962 com myapp application signature not valid Found V GoogleSignatureVerif
  • 创建 Maven 项目,无法解析原型,连接被拒绝

    我怀疑我有 Maven 代理问题 当我创建一个新项目时 1 文件 gt 新建 gt Maven项目 2 我选择原型 在 org apache maven archetypes 中 gt maven 原型 webapp 3 我得到这个错误 无
  • 从其他进程获取模块句柄

    有没有办法使用 C 从另一个进程获取我知道其名称的模块的句柄 GetModuleHandle and GetModuleHandleEx仅从同一进程获取句柄就很好 您可以使用读取进程内存 http msdn microsoft com en
  • 域名可以有两个连续的连字符吗

    我在 SO 上查找了几个问题 这似乎表明不允许使用两个连续的连字符 例如 my website com 但是当我在http www register com index rcmx http www register com index rc
  • Flask-sqlalchemy - PostgreSQL - 为表定义特定模式?

    我想使用flask sqlalchemy 为 模型 定义特定模式 当您在 sqlalchemy 本身中创建表对象时 它有一个用于传递模式名称的参数 我如何在flask sqlalchemy中做到这一点 当您定义模型类时 请使用 table
  • 最佳实践 - 在 EntityFramework 中混合表实体与视图实体?

    我有一个遗留数据库 我想与实体框架进行交互 该数据库经过高度规范化 用于存储有关航班的信息 为了更容易地处理某些数据 编写了许多 SQL 视图来扁平化数据并将某些多表连接转换为更多逻辑信息 快速查看后 我发现在 EF 中使用视图有两个问题
  • Spring Integration 通道统计指标

    不知怎的 我没有捕捉到 Spring Integration Metrics 内容 我想要的是关于每秒有多少消息通过消息通道 最小和最大吞吐量是多少的统计输出 如果我使用newTicketChannel getSendRate 然后我变成以
  • 如何使用 cmis 查询过滤文件夹子级?

    我想通过一个查询从 cmis 1 0 兼容存储库中过滤文件夹的子级 到目前为止 这似乎不可能 所以我决定执行两个查询来检索子项 即文件夹和文档 但是仍然想按自定义类型过滤子项 因此我有以下查询 SELECT cmis objectTypeI
  • R:将多个二元列转换为一个因子变量,其因子是二元列

    我收到了一个可怕的数据集 我正在努力清理它 272 个 字符 变量和 343 个观察值 它由许多二元变量组成 这些二元变量可以概括为具有多个因素的一个变量 因此 不要问 您是个体经营者还是受雇者 并且给定选项 1 自雇 2 受雇 以及可能
  • Mongoose .find() 方法导致请求挂起

    我定义了这条路线 但对其发出的任何请求都会陷入 待处理 状态并永远运行 当我记录代码时 我看到1其次是4 这意味着 find 方法中的代码永远不会被执行 Calendar routes router get calendars req re
  • Hive UDF 用于选择除某些列之外的所有列

    HiveQL 以及一般的 SQL 中常见的查询构建模式是选择所有列 SELECT 或明确指定的一组列 SELECT A B C SQL 没有内置机制来选择除指定的一组列之外的所有列 有多种机制可以排除某些列 如中所述这个问题 https s