使用简单的 Java 客户端代码查询 Treasure Data DB

Query Treasure Data DB with simple Java client code

我已经尝试创建一个简单的 select 计数查询:

Treasure data Guide

    Properties props = new Properties();
    props.setProperty("user", "someUser");
    props.setProperty("password", "password1");

    // Alternatively, you can use API key instead of user and password
    // props.setProperty("apikey", "(your API key)")

    // For using SSL connection (default is false)
    props.setProperty("useSSL", "true");

    // To run Hive jobs specify "type" parameter. The default is "presto"
    props.setProperty("type", "presto");

    java.sql.Connection conn = DriverManager.getConnection("jdbc:presto://api.treasuredata.com/sample_datasets", props);
    Statement st = conn.createStatement();
    try {
        ResultSet rs = st.executeQuery("SELECT count(1) FROM www_access");
        while (rs.next()) {
            int count = rs.getInt(1);
            System.out.println("result = " + count);
        }
        rs.close();
    } finally {
        st.close();
        conn.close();
    }

我该如何解决这个错误:

HTTP protocol violation: Authentication challenge without WWW-Authenticate header

已附加完整堆栈跟踪:

    Exception in thread "main" java.sql.SQLException: Error executing query
    at com.facebook.presto.jdbc.PrestoStatement.execute(PrestoStatement.java:232)
    at com.facebook.presto.jdbc.PrestoStatement.executeQuery(PrestoStatement.java:69)
    at com.Xxxxxxxx.DatabaseProvider.main(DatabaseProvider.java:393)
Caused by: java.lang.RuntimeException: Error reading response from server
    at com.facebook.presto.jdbc.internal.airlift.http.client.FullJsonResponseHandler.readResponseBytes(FullJsonResponseHandler.java:75)
    at com.facebook.presto.jdbc.internal.airlift.http.client.FullJsonResponseHandler.handle(FullJsonResponseHandler.java:61)
    at com.facebook.presto.jdbc.internal.airlift.http.client.FullJsonResponseHandler.handle(FullJsonResponseHandler.java:35)
    at com.facebook.presto.jdbc.internal.airlift.http.client.jetty.JettyHttpClient.execute(JettyHttpClient.java:377)
    at com.facebook.presto.jdbc.internal.client.StatementClient.<init>(StatementClient.java:115)
    at com.facebook.presto.jdbc.QueryExecutor.startQuery(QueryExecutor.java:62)
    at com.facebook.presto.jdbc.PrestoConnection.startQuery(PrestoConnection.java:597)
    at com.facebook.presto.jdbc.PrestoStatement.execute(PrestoStatement.java:207)
    ... 2 more
Caused by: java.io.IOException: com.facebook.presto.jdbc.internal.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
    at com.facebook.presto.jdbc.internal.jetty.client.util.InputStreamResponseListener$Input.toIOException(InputStreamResponseListener.java:353)
    at com.facebook.presto.jdbc.internal.jetty.client.util.InputStreamResponseListener$Input.read(InputStreamResponseListener.java:321)
    at com.facebook.presto.jdbc.internal.guava.io.CountingInputStream.read(CountingInputStream.java:62)
    at java.io.FilterInputStream.read(FilterInputStream.java:107)
    at com.facebook.presto.jdbc.internal.guava.io.ByteStreams.copy(ByteStreams.java:70)
    at com.facebook.presto.jdbc.internal.guava.io.ByteStreams.toByteArray(ByteStreams.java:115)
    at com.facebook.presto.jdbc.internal.airlift.http.client.FullJsonResponseHandler.readResponseBytes(FullJsonResponseHandler.java:72)
    ... 9 more
Caused by: com.facebook.presto.jdbc.internal.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
    at com.facebook.presto.jdbc.internal.jetty.client.AuthenticationProtocolHandler$AuthenticationListener.onComplete(AuthenticationProtocolHandler.java:114)
    at com.facebook.presto.jdbc.internal.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:193)
    at com.facebook.presto.jdbc.internal.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:185)
    at com.facebook.presto.jdbc.internal.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:457)
    at com.facebook.presto.jdbc.internal.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:404)
    at com.facebook.presto.jdbc.internal.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:269)
    at com.facebook.presto.jdbc.internal.jetty.http.HttpParser.parseContent(HttpParser.java:1515)
    at com.facebook.presto.jdbc.internal.jetty.http.HttpParser.parseNext(HttpParser.java:1332)
    at com.facebook.presto.jdbc.internal.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:159)
    at com.facebook.presto.jdbc.internal.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:120)
    at com.facebook.presto.jdbc.internal.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:70)
    at com.facebook.presto.jdbc.internal.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:90)
    at com.facebook.presto.jdbc.internal.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:115)
    at com.facebook.presto.jdbc.internal.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
    at com.facebook.presto.jdbc.internal.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at com.facebook.presto.jdbc.internal.jetty.io.SelectChannelEndPoint.run(SelectChannelEndPoint.java:93)
    at com.facebook.presto.jdbc.internal.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
    at com.facebook.presto.jdbc.internal.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
    at com.facebook.presto.jdbc.internal.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
    at com.facebook.presto.jdbc.internal.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
    at com.facebook.presto.jdbc.internal.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:589)
    at java.lang.Thread.run(Thread.java:745)

您似乎在使用 DATORAMA 及其 Presto 连接器。 但是,TreasureData 上的 Presto 不支持通用的 Presto 连接器。 因此,目前您无法从 DATORAMA 直接向 TreasureData 发出查询。

但是,Treasure Data 中的查询可以通过使用结果输出到 FTP 将结果推送到 Datorama。

请检查这些文档。

https://docs.treasuredata.com/articles/result-into-datorama https://docs.treasuredata.com/articles/result-into-ftp