wren-engine icon indicating copy to clipboard operation
wren-engine copied to clipboard

Column name suppkey is ambiguous

Open brandboat opened this issue 1 year ago • 0 comments

ERROR: com.google.cloud.bigquery.BigQueryException: Column name suppkey is ambiguous at [54:6] sql

SELECT * FROM SupplierRevenue

json

{
  "catalog": "canner-cml",
  "schema": "tpch_tiny",
  "models": [
    {
      "name": "Orders",
      "refSql": "select * from \"canner-cml\".tpch_tiny.orders",
      "columns": [
        {
          "name": "orderkey",
          "expression": "o_orderkey",
          "type": "integer"
        },
        {
          "name": "custkey",
          "expression": "o_custkey",
          "type": "integer"
        },
        {
          "name": "orderstatus",
          "expression": "o_orderstatus",
          "type": "OrderStatus"
        },
        {
          "name": "totalprice",
          "expression": "o_totalprice",
          "type": "float"
        },
        {
          "name": "customer",
          "type": "Customer",
          "relationship": "OrdersCustomer"
        },
        {
          "name": "orderdate",
          "expression": "o_orderdate",
          "type": "date"
        },
        {
          "name": "lineitem",
          "type": "Lineitem",
          "relationship": "OrdersLineitem"
        }
      ],
      "primaryKey": "orderkey"
    },
    {
      "name": "Customer",
      "refSql": "select * from \"canner-cml\".tpch_tiny.customer",
      "columns": [
        {
          "name": "custkey",
          "expression": "c_custkey",
          "type": "integer"
        },
        {
          "name": "name",
          "expression": "c_name",
          "type": "string"
        },
        {
          "name": "orders",
          "type": "Orders",
          "relationship": "OrdersCustomer"
        }
      ],
      "primaryKey": "custkey"
    },
    {
      "name": "Lineitem",
      "refSql": "select * from \"canner-cml\".tpch_tiny.lineitem",
      "columns": [
        {
          "name": "orderkey",
          "expression": "l_orderkey",
          "type": "integer"
        },
        {
          "name": "partkey",
          "expression": "l_partkey",
          "type": "integer"
        },
        {
          "name": "suppkey",
          "expression": "l_suppkey",
          "type": "integer"
        },
        {
          "name": "linenumber",
          "expression": "l_linenumber",
          "type": "integer"
        },
        {
          "name": "extendedprice",
          "expression": "l_extendedprice",
          "type": "double"
        },
        {
          "name": "discount",
          "expression": "l_discount",
          "type": "double"
        },
        {
          "name": "shipdate",
          "expression": "l_shipdate",
          "type": "date"
        },
        {
          "name": "orders",
          "type": "Orders",
          "relationship": "OrdersLineitem"
        },
        {
          "name": "part",
          "type": "Part",
          "relationship": "LineitemPart"
        },
        {
          "name": "orderkey_linenumber",
          "type": "string",
          "expression": "concat(l_orderkey, l_linenumber)"
        },
        {
          "name": "supplier",
          "type": "Supplier",
          "relationship": "LineitemSupplier"
        }
      ],
      "primaryKey": "orderkey_linenumber"
    },
    {
      "name": "Part",
      "refSql": "select * from \"canner-cml\".tpch_tiny.part",
      "columns": [
        {
          "name": "partkey",
          "expression": "p_partkey",
          "type": "integer"
        },
        {
          "name": "name",
          "expression": "p_name",
          "type": "string"
        }
      ],
      "primaryKey": "partkey"
    },
    {
      "name": "Supplier",
      "refSql": "select * from \"canner-cml\".tpch_tiny.supplier",
      "columns": [
        {
          "name": "suppkey",
          "expression": "s_suppkey",
          "type": "integer"
        },
        {
          "name": "name",
          "expression": "s_name",
          "type": "string"
        },
        {
          "name": "address",
          "expression": "s_name",
          "type": "string"
        },
        {
          "name": "nationkey",
          "expression": "s_nationkey",
          "type": "integer"
        },
        {
          "name": "phone",
          "expression": "s_phone",
          "type": "string"
        },
        {
          "name": "acctbal",
          "expression": "s_acctbal",
          "type": "float"
        },
        {
          "name": "comment",
          "expression": "s_comment",
          "type": "string"
        }
      ],
      "primaryKey": "suppkey"
    }
  ],
  "relationships": [
    {
      "name": "OrdersCustomer",
      "models": [
        "Orders",
        "Customer"
      ],
      "joinType": "MANY_TO_ONE",
      "condition": "Orders.custkey = Customer.custkey"
    },
    {
      "name": "OrdersLineitem",
      "models": [
        "Orders",
        "Lineitem"
      ],
      "joinType": "ONE_TO_MANY",
      "condition": "Orders.orderkey = Lineitem.orderkey"
    },
    {
      "name": "LineitemPart",
      "models": [
        "Lineitem",
        "Part"
      ],
      "joinType": "MANY_TO_ONE",
      "condition": "Lineitem.partkey = Part.partkey"
    },
    {
      "name": "LineitemSupplier",
      "models": [
        "Lineitem",
        "Supplier"
      ],
      "joinType": "MANY_TO_ONE",
      "condition": "Lineitem.suppkey = Supplier.suppkey"
    }
  ],
  "metrics": [
    {
      "name": "Revenue",
      "baseModel": "Orders",
      "dimension": [
        {
          "name": "custkey",
          "type": "integer"
        }
      ],
      "measure": [
        {
          "name": "totalprice",
          "type": "integer",
          "expression": "sum(totalprice)"
        }
      ],
      "timeGrain": [
        {
          "name": "orderdate",
          "refColumn": "orderdate",
          "dateParts": [
            "YEAR",
            "MONTH"
          ]
        }
      ]
    },
    {
      "name": "SupplierRevenue",
      "baseModel": "Lineitem",
      "dimension": [
        {
          "name": "supplierkey",
          "expression": "suppkey",
          "type": "integer"
        },
        {
          "name": "name",
          "expression": "supplier.name",
          "type": "string"
        },
        {
          "name": "address",
          "expression": "supplier.address",
          "type": "string"
        },
        {
          "name": "phone",
          "expression": "supplier.phone",
          "type": "string"
        }
      ],
      "measure": [
        {
          "name": "total_revenue",
          "type": "double",
          "expression": "sum(extendedprice * (1 - discount))"
        }
      ],
      "timeGrain": [
        {
          "name": "shipdate",
          "refColumn": "shipdate",
          "dateParts": ["DAY"]
        }
      ]
    }
  ],
  "enumDefinitions": [
    {
      "name": "Status",
      "values": [
        {
          "name": "F"
        },
        {
          "name": "O"
        },
        {
          "name": "P"
        }
      ]
    }
  ],
  "views": [
    {
      "name": "useModel",
      "statement": "select * from Orders"
    },
    {
      "name": "useRelationship",
      "statement": "select orderkey, customer.name from Orders"
    },
    {
      "name": "useRelationshipCustomer",
      "statement": "select name, array_length(orders) as length from Customer"
    },
    {
      "name": "useMetric",
      "statement": "select * from Revenue"
    },
    {
      "name": "useMetricRollUp",
      "statement": "select * from roll_up(Revenue, orderdate, YEAR)"
    },
    {
      "name": "useUseMetric",
      "statement": "select * from useMetric"
    },
    {
      "name": "useAny",
      "statement": "SELECT any(filter(orders, orderItem -> orderItem.orderstatus = 'F')).totalprice FROM Customer LIMIT 100"
    }
  ]
}

bigquery sql generated by accio

WITH
  Lineitem AS (
   SELECT
     l_orderkey orderkey
   , l_partkey partkey
   , l_suppkey suppkey
   , l_linenumber linenumber
   , l_extendedprice extendedprice
   , l_discount discount
   , l_shipdate shipdate
   , 'relationship<OrdersLineitem>' orders
   , 'relationship<LineitemPart>' part
   , concat(l_orderkey, l_linenumber) orderkey_linenumber
   , 'relationship<LineitemSupplier>' supplier
   FROM
     (
      SELECT *
      FROM
        `canner-cml`.tpch_tiny.lineitem
   )  t
) 
, Supplier AS (
   SELECT
     s_suppkey suppkey
   , s_name name
   , s_name address
   , s_nationkey nationkey
   , s_phone phone
   , s_acctbal acctbal
   , s_comment comment
   FROM
     (
      SELECT *
      FROM
        `canner-cml`.tpch_tiny.supplier
   )  t
) 
, rs_y7eibaa64x AS (
   SELECT DISTINCT
     t.suppkey suppkey
   , t.name name
   , t.address address
   , t.nationkey nationkey
   , t.phone phone
   , t.acctbal acctbal
   , t.comment comment
   , s.orderkey_linenumber bk
   FROM
     (Lineitem s
   LEFT JOIN Supplier t ON (s.suppkey = t.suppkey))
) 
, SupplierRevenue AS (
   SELECT
     suppkey
   , rs_y7eibaa64x.name name
   , rs_y7eibaa64x.address address
   , rs_y7eibaa64x.phone phone
   , sum((extendedprice * (1 - discount))) total_revenue
   FROM
     (Lineitem
   LEFT JOIN rs_y7eibaa64x ON (Lineitem.orderkey_linenumber = rs_y7eibaa64x.bk))
   GROUP BY 1, 2, 3, 4
) 
SELECT *
FROM
  SupplierRevenue

brandboat avatar Jun 29 '23 09:06 brandboat