簡體   English   中英

如何使用 JDBC 從雪花中讀取數值數組?

[英]How to read an array of numeric values from snowflake with JDBC?

我在包含浮點值的雪花表中有一個類型為 ARRAY 的列。

我想檢索此列並使用 JDBC 連接器在 Java 中創建一個double[]

這段代碼

int ARRAY_INDEX = 0;
resultSet.getMetaData().getColumnTypeName(ARRAY_INDEX);

返回ARRAY但是當我嘗試讀取數據時

resultSet.getArray(ARRAY_INDEX);

我收到以下錯誤:

Exception in thread "main" net.snowflake.client.jdbc.SnowflakeLoggedFeatureNotSupportedException
    at net.snowflake.client.jdbc.SnowflakeBaseResultSet.getArray(SnowflakeBaseResultSet.java:795)

我能讀到的只是一個字符串:

resultSet.getString(ARRAY_INDEX);
> "[\n -4.5,\n 2.8,\n 100.0, ... ]"

然后我可以拆分這個字符串並將其解析為雙精度,但這似乎非常低效。

有沒有辦法直接檢索數值數組,理想情況下直接檢索一個 double[]?

在 Snowflake JDBC 驅動程序的源代碼中,您可以看到方法 getColumnTypeName 不受支持:

https://github.com/snowflakedb/snowflake-jdbc/blob/master/src/main/java/net/snowflake/client/jdbc/SnowflakeBaseResultSet.java

事實上,所有返回 Array 類型的方法的實現都返回未實現的異常。

Snowflake DB 以您看到字符串的方式返回 arrays :

select array_construct(1, 2, 3, 4, 5) as MY_ARRAY;

回報:

[
  1,
  2,
  3,
  4,
  5
]

所以無論如何,客戶端上的 Java 代碼將不得不解析它。 您可以覆蓋 JDBC 驅動程序的getArray方法來實現它而不是返回錯誤,但這可能不值得,除非您有很多使用getArray的預先存在的代碼。 如果您沒有調用該方法的現有代碼,則可以在從 ResultSet 讀取的 class 中對其進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM