Skip to content

[C++] Add a general "if, ifelse, ..., else" kernel ("CASE WHEN") #28773

@asfimport

Description

@asfimport

ARROW-10640 added a ternary if_else kernel. Add another kernel that extends this concept to an arbitrary number of conditions and associated results, like a vectorized if-ifelse-...-else with an arbitrary number of ifelse and with the else optional. This is like a SQL CASE statement.

How best to achieve this is not obvious. To enable SQL-style uses, it would be most efficient to implement this as a variadic kernel where the even-number arguments (0, 2, ...) are the arrays of boolean conditions, the odd-number arguments (1, 3, ...) are the corresponding arrays of results, and the final argument is the else result. But I'm not sure if this is practical. Maybe instead we should implement this to operate on listarrays, like NumPy's [np.where|https://numpy.org/doc/stable/reference/generated/numpy.where.html] or [np.select|https://numpy.org/doc/stable/reference/generated/numpy.select.html].

Reporter: Ian Cook / @ianmcook
Assignee: David Li / @lidavidm

Related issues:

PRs and other links:

Note: This issue was originally created as ARROW-13064. Please see the migration documentation for further details.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions