數據太長列的錯誤

如果一列超過4000個字符是太大的默認數據類型並返回一個錯誤。

寫的亞當Pavlacka

去年發表在:2022年5月16日

問題

你想插入一個表結構,但你會得到一個java.sql。SQLException異常:數據太長列錯誤。

引起的:java.sql。SQLException異常:數據太長列“TYPE_NAME”在第一行查詢的方法是:插入COLUMNS_V2 (CD_ID,評論,“COLUMN_NAME”、TYPE_NAME INTEGER_IDX)值(?,?,?,?,?),參數(103182年,《零》,“地址”,“結構< street_address1: struct < street_number: int, street_name:字符串,street_type:字符串,國家:字符串,postal_code: string >, street_address2: struct < street_number: int, street_name:字符串,street_type:字符串,國家:字符串,postal_code: string >, street_address3: struct < street_number: int, street_name:字符串,street_type:字符串,國家:字符串,postal_code: string >, street_address4: struct < street_number: int, street_name:字符串,street_type:字符串,國家:字符串,postal_code: string >, street_address5: struct < street_number: int, street_name:字符串,street_type:字符串,國家:字符串,postal_code: string >, street_address6: struct < street_number: int, street_name:字符串,street_type:字符串,國家:字符串,postal_code: string >, street_address7: struct < street_number: int, street_name:字符串,street_type:字符串,國家:字符串,postal_code: string >, street_address8: struct < street_number: int, street_name:字符串,street_type:字符串,清純甜美……在org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery org.mariadb.jdbc.internal.util.LogQueryTool.exceptionWithQuery (LogQueryTool.java: 153) (AbstractQueryProtocol.java: 255) org.mariadb.jdbc.MariaDbPreparedStatementClient.executeInternalBatch (MariaDbPreparedStatementClient.java: 368) org.mariadb.jdbc.MariaDbPreparedStatementClient.executeBatch (MariaDbPreparedStatementClient.java: 280)

導致

這個問題的根源是一個默認的數據類型varchar (4000)列在你的桌子上。

如果你有一個深層嵌套的結構體長度超過4000多個字符,它超過大小的默認數據類型和結果在一個錯誤消息。

你可以驗證這個通過描述列你正試圖將數據插入。它將返回的數據類型varchar (4000)

解決方案

您應該使用一個外部metastore如果你要超過4000個字符在一個列。的默認數據類型數據磚蜂巢metastorevarchar (4000),不能更改。

當你使用一個外部metastore,完全控製列和數據庫名稱的長度。你也有控製排序的列的名稱,數據庫名和表名。

檢查外部Apache蜂巢metastore (AWS|Azure|GCP)文檔以了解如何設置外部metastore。

一旦創建了metastore表,您就可以直接修改列數據類型使用ALTER TABLE命令。

這篇文章有用嗎?