verdict-project / verdict

Interactive-Speed Analytics: 200x Faster, 200x Fewer Cluster Resources, Approximate Query Processing
http://verdictdb.org
Apache License 2.0
248 stars 66 forks source link

Error resultset #373

Closed solangepaz closed 5 years ago

solangepaz commented 5 years ago

I'm using VerdictDB in Java, according to your tutorial. I saw in the paper that they used, for example, the query #tq-12 of TPC-H. If I use it in Java, I have this error: Exception in thread "main" java.lang.NullPointerException at org.verdictdb.commons.AttributeValueRetrievalHelper.getDouble(AttributeValueRetrievalHelper.java:172) at org.verdictdb.jdbc41.VerdictResultSet.getDouble(VerdictResultSet.java:332) at Main.runQuery(Main.java:110) at Main.main(Main.java:61)

My code to run the query is:

 private static void runQuery(Connection verdictConn, Connection mysqlConn, String database)
            throws SQLException {
        Stopwatch watch = new Stopwatch();
        watch.start();
        ResultSet rs2 =
                verdictConn.createStatement()
          .executeQuery(String.format(" SELECT\n" +
                  "    l_shipmode,\n" +
                  "    sum(case\n" +
                  "        when o_orderpriority = '1-URGENT'\n" +
                  "            OR o_orderpriority = '2-HIGH'\n" +
                  "            then 1\n" +
                  "        else 0\n" +
                  "    end) as high_line_count,\n" +
                  "    sum(case\n" +
                  "        when o_orderpriority <> '1-URGENT'\n" +
                  "            AND o_orderpriority <> '2-HIGH'\n" +
                  "            then 1\n" +
                  "        else 0\n" +
                  "    end) AS low_line_count\n" +
                  "FROM\n" +
                  "    tpch.orders,\n" +
                  "    tpch.lineitem\n" +
                  "WHERE\n" +
                  "    o_orderkey = l_orderkey\n" +
                  "    AND l_shipmode in ('MAIL', 'SHIP')\n" +
                  "    AND l_commitdate < l_receiptdate\n" +
                  "    AND l_shipdate < l_commitdate\n" +
                  "    AND l_receiptdate >= date '1994-01-01'\n" +
                  "    AND l_receiptdate < date '1994-01-01' + interval '1' year\n" +
                  "GROUP BY\n" +
                  "    l_shipmode\n" +
                  "ORDER BY\n" +
                  "    l_shipmode;", database));

        watch.stop();
        if (rs2.next()) {
            System.out.println("  " + rs2.getDouble(1));
        }
        Long time = watch.elapsedTime(TimeUnit.SECONDS);
        System.out.println("Time Taken = " + time + " s");
        rs2.close();
    }
pyongjoo commented 5 years ago

I suspect this happened due to "database NULL" -> double conversion, but who knows...

What was the scale of your data (say, 1 GB)?

solangepaz commented 5 years ago

Yes, I used 1GB of data.

pyongjoo commented 5 years ago

Can you tell me which version of VerdictDB you used?

I just ran the same query for TPCH 1GB, and it ran fine. FYI, I used pyverdict, which I installed by "pip install pyverdict --upgrade".

solangepaz commented 5 years ago

I'm using version 0.5.8 in Java. I did not want to do the queries in python. Now I got the result of the query, the error was when I was trying to print the resultset values (it returned string and I was trying to print double). Thanks