數據太長,列錯誤

問題

您試圖將一個結構體插入到表中,但是您得到一個java.sql.SQLException:數據錯誤。

由:java.sql.SQLException:第一行的“TYPE_NAME”列的數據太長查詢的方法是:插入columns_v2 (cd_id, comment, ' 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.util.LogQueryTool.exceptionWithQuery (LogQueryTool.java: 153)org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery (AbstractQueryProtocol.java: 255)org.mariadb.jdbc.MariaDbPreparedStatementClient.executeInternalBatch (MariaDbPreparedStatementClient.java: 368)org.mariadb.jdbc.MariaDbPreparedStatementClient.executeBatch (MariaDbPreparedStatementClient.java: 280)

導致

的默認數據類型是此問題的根本原因varchar (4000)用於表中的列。

如果您有一個深度嵌套的結構,其長度超過4000個字符,那麼它將超過默認數據類型的大小,並導致錯誤消息。

您可以通過描述要插入數據的列來驗證這一點。它將返回數據類型為varchar (4000)

解決方案

如果你想在一列中超過4000個字符,你應該使用外部轉移。Databricks Hive metastore的默認數據類型是varchar (4000)而且無法改變。

當使用外部亞轉移時,可以完全控製列和數據庫名的長度。您還可以控製列名、數據庫名和表名的排序規則。

檢查外部Apache Hive轉移瘤學習如何建立外部轉移瘤的文檔。

方法創建了亞轉移表之後,就可以直接修改列數據類型改變表格命令。

請注意

當使用外部轉移體時,你要負責維護、修補和升級轉移體。它不會自動發生。