substrait-explain 0.7.0

Explain Substrait plans as human-readable text.
Documentation
=== Extensions
URNs:
  @  1: https://github.com/substrait-io/substrait/blob/main/extensions/functions_arithmetic.yaml
  @  2: https://github.com/substrait-io/substrait/blob/main/extensions/functions_comparison.yaml
  @  3: https://github.com/substrait-io/substrait/blob/main/extensions/functions_aggregate.yaml
Functions:
  # 10 @  2: eq
  # 11 @  1: abs
  # 12 @  3: sum
  # 13 @  3: count
  # 14 @  1: coalesce

=== Plan
Root[c, d]
  Filter[eq($0, 0):boolean => $0, $1]
    Project[$1, abs($0):fp64?]
      Read[schema.table => a:fp64?, b:i64]

Root[c, d, e]
  Aggregate[$0 => $0, sum($1):fp64?, count($1):i64]
    Read[schema.table => name:string?, num:fp64?, id:i64]

Root[name, num]
  Project[$1, coalesce($1, $2):fp64?]
    Read[schema.table => name:string?, num:fp64?, other_num:fp64?, id:i64]

Root[name, parent, sum, count]
  Join[&Inner, eq($0, $4):boolean => $0, $3, $1, $2]
    Aggregate[$0 => $0, sum($1):fp64?, count($1):i64]
      Read[schema.table => name:string?, num:fp64?, id:i64]
    Read[schema.table2 => parent:string?, name:string?]

Root[name, num, id]
  Sort[($1, &DescNullsFirst), ($0, &DescNullsLast) => $0, $1, $2]
    Read[schema.table => name:string?, num:fp64?, id:i64]

Root[result]
  Project[$0, $1, $2]
    Filter[eq($2, 100):boolean => $0, $1, $2]
      Read[orders => customer:string, amount:fp64, order_id:i64]

Root[name, count]
  Read[users => name:string?, count:i32]