日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

Hologres SQL語句的常見問題

更新時間:

本文為您羅列Hologres中常見的錯誤碼,以及對應的報錯信息和解決方案,方便業(yè)務快速定位或者處理問題。

HG_ERRCODE_FDW_ERROR

報錯:failed to import foreign schema from odps: Can't find file system factory

  • 問題原因:Hologres不支持查詢MaxCompute側的外部表。

  • 解決方法:重新創(chuàng)建MaxCompute內部表。

ERRCODE_FDW_ERROR

報錯:failed to import foreign schema from odps: Authorization Failed:xxx

  • 問題原因:沒有對應MaxCompute表的權限。

  • 解決方法:前往MaxCompute為賬號設置更多的權限,詳情請參見通過命令管理用戶權限

報錯:failed to import foreign schema from odps:Table not found -xxx

  • 問題原因:查詢的表在MaxCompute中不存在。

  • 解決方法:前往MaxCompute確認表是否存在。

ERRCODE_UNIQUE_VIOLATION或者pk violates

報錯:Update row with Key (id)=(xxxx) multiple times或者duplicate key value violates unique constraint

  • 問題原因:違反唯一性約束,執(zhí)行UPDATE、INSERT ON CONFLICT或INSERT操作時,主鍵存在重復數據。

  • 解決方法:

    • 若INSERT語法報錯:可以改為INSERT INTO xx ON CONFLICT的語法,實現主鍵去重,詳情請參見INSERT ON CONFLICT(UPSERT)

    • INSERT INTO xx ON CONFLICT語法報錯:為數據源存在重復數據導致,可參考常見報錯解決。

    • 若以上都不是,可能是因為表設置了TTL,TTL到期了但數據還未被刪除,可以使用hg_remove_duplicated_pk函數清理,詳情請參見常見報錯

ERRCODE_CHECK_VIOLATION或者partition constraint

報錯:ERROR: new row for relation violates partition constraint

  • 問題原因:違反檢查約束,分區(qū)表寫入的值與定義的值不一致。例如分區(qū)表定義的值為20240110,但是寫入了其他分區(qū)值,導致分區(qū)沖突。示例如下:

    CREATE TABLE public.tbl_20240110 PARTITION OF public.tbl FOR VALUES IN('20240110');
    
    INSERT INTO public.tbl_20240110 SELECT * FROM odps_tbl where sale_date >'20240110';
    
    
    error: new row for relation "tbl_20240110" violates partition constraint
    
  • 解決方法:向分區(qū)表內寫入符合分區(qū)約束的分區(qū)值。

ERRCODE_NOT_NULL_VIOLATION或者not-null constraint或者UsageProblem

報錯:null value in column "xxx" violates not-null constraint

  • 問題原因:違反非空約束,NOT NULL的列寫入了NULL值。

  • 解決方法:去掉NULL的臟數據后再進行寫入。

ERRCODE_UNDEFINED_TABLE

報錯:Dispatch query failed: Table not found

  • 問題原因:表不存在,一般出現在表剛剛創(chuàng)建未更新元數據或者Query執(zhí)行過程中,表執(zhí)行TRUNCATE或DROP操作的場景。

  • 解決方案:可以使用HoloWeb Query洞察排查,在Query執(zhí)行過程中是否同時存在TRUNCATE或DROP的DDL沖突任務,然后重新執(zhí)行Query,詳情請參見Query洞察。后期盡量避免Query執(zhí)行過程中有DDL沖突任務。

ERRCODE_QUERY_CANCELED或者Query Is Cancelled

報錯:ERROR: canceling statement due to statement timeout

  • 問題原因:客戶端設置了超時時間,Query運行時間超過了超時時間。

  • 解決方法:優(yōu)化Query使其運行時間更短,或者重新設置更加合理的超時時間。超時時間設置詳情請參見Query管理

報錯:ERROR: Query:[xxx] Get result failed: canceling statement due to user request

  • 問題原因:查詢被取消,通常是因為表被執(zhí)行了DROP或TRUNCATE操作。

  • 解決方法:可以通過HoloWeb Query洞察排查是否有沖突的DDL,詳情請參見Query洞察。后期盡量避免Query執(zhí)行過程中有DDL沖突任務。

報錯:query is cancelled Cannot find index full ID:xxx (table id: x, index id: x) in storages or it is deleting

  • 問題原因:Query執(zhí)行過程中,涉及到的表存在TRUNCATE或DROP等行為,導致表的table id發(fā)生變化,Query被取消了。

  • 解決方法:使用Query洞察排查當前Query是否在同一時間執(zhí)行了TRUNCATE或DROP操作,詳情請參見Query洞察

ERRCODE_FEATURE_NOT_SUPPORTED或者Unsupported Feature

報錯:Feature not supported: insert into parent table

  • 問題原因:不支持直接寫入數據至分區(qū)父表。

  • 解決方法:SQL方式執(zhí)行INSERT時,需要將數據寫入指定的分區(qū)子表。詳情請參見CREATE PARTITION TABLE

報錯:SELECT INTO is not supported now.

  • 問題原因:Hologres不支持使用SELECT INTO語法。

  • 解決方法:您可使用INSERT INTO SELECT方式插入數據,詳情請參見INSERT

報錯:ALTER TABLE CHANGE OWNER is not supported in SLPM (Schema-Level Permission Mode)

  • 問題原因:不支持在SLPM模型下使用ALTER TABLE的方式改變表Owner。

  • 解決方法:SLPM權限模式的表Owner都是用戶組,可以通過將用戶從用戶組中移除的方式來改變用戶的權限。詳情請參見移除用戶組

報錯:Feature not supported: INSERT ON CONFLICT RETURNING

  • 問題原因:Hologres暫不支持INSERT ON CONFLICT RETURNING語法。

  • 解決方法:去掉RETURNING,僅使用INSERT ON CONFLICT語法,詳情請參見INSERT ON CONFLICT(UPSERT)

報錯:ERROR: INSERT in ddl transaction is not supported now

  • 問題原因:不支持在事務中使用INSERT。示例如下:

    BEGIN;
    INSERT xxx
    commit;
    ERROR: INSERT in ddl transaction is not supported now
  • 解決方法:在事務外使用INSERT,或者開啟DML事務,詳情請參見SQL事務能力

報錯:Creating publication with table that without binlog is not supported now

  • 問題原因:對沒有開啟Binlog的表創(chuàng)建了Publication。

  • 解決方法:Publication是用于訂閱Binlog的,只允許對開啟了Binlog的表創(chuàng)建Publication,詳情請參見通過JDBC消費Hologres Binlog

報錯:Feature not supported: INSERT on conflict contains un-unique column

  • 問題原因:INSERT ON CONFLICT中的conflict條件使用了非主鍵字段。

  • 解決方法:INSERT ON CONFLICT中的conflict條件只能使用主鍵。

報錯:Feature not supported: UPDATE with shard keys

  • 問題原因:Hologres不支持對主鍵或Distribution Key執(zhí)行UPDATE操作。

  • 解決方法:修改SQL重新執(zhí)行。

報錯:time before 1925 not supported

  • 問題原因:時間相關的函數默認支持的范圍為1925~2282年,超過該范圍則會報錯。

  • 解決方法:如果是to_char、to_date或to_timestamp等函數,可以在SQL前通過設置GUC參數hg_experimental_functions_use_pg_implementation以支持更大范圍的時間。詳情請參見日期和時間函數

報錯:Group by key is type of imprecise not supported

  • 問題原因:GROUP BY的字段類型是非精確類型,導致出現報錯。

  • 解決方法:GROUP BY中避免非精確數據類型,如FLOAT等,建議使用精確的數據類型。

報錯:CREATE TABLE is not supported for current instance

  • 問題原因:當前實例是共享集群(實例Endpoint以hgmc開頭,如hgmc-cn-xxwwwkkk,可前往Hologres管控臺查看實例Endpoint)或者從實例,共享集群不支持創(chuàng)建內部表,只能創(chuàng)建外部表,從實例只能查詢表數據,不能創(chuàng)建表。

  • 解決方法:

    • 如果是共享集群,按照創(chuàng)建外部表的語法創(chuàng)建外部表,詳情請參見CREATE FOREIGN TABLE。或者使用Hologres獨享實例,可支持創(chuàng)建內部表。

    • 如果是從實例,需要使用主實例創(chuàng)建表。

報錯:ALTER TABLE ALTER COLUMN SET TYPE is not supported now

  • 問題原因:當前不支持通過ALTER TABLE的方式修改列的類型。

  • 解決方法:重新建表并修改列類型。

報錯:ERROR: Currently materialized view does not support aggregate on expressions, only support single column

  • 問題原因:單表物化視圖不支持表達式,從而出現報錯。

  • 解決方法:單表物化視圖避免使用表達式,詳情請參見SQL管理物化視圖

ERRCODE_UNDEFINED_OBJECT

報錯:column xxx does not exist

  • 問題原因:列不存在。

  • 解決方法:重新檢查SQL語句是否錯誤。

報錯:Table group xxx does not exist

  • 問題原因:Table Group不存在。

  • 建表時指定已存在的Table Group,或者提前創(chuàng)建Table Group。

報錯:The specified partition does not exist

  • 問題原因:通常發(fā)生在數據寫入或更新時,對應的分區(qū)表不存在。

  • 解決方法:提前創(chuàng)建對應分區(qū)。

報錯:create binlog reader failed: Fail to find any shards, please check if the table group is in current warehouse

  • 問題原因:該Warehouse上沒有該Table Group。

  • 解決方法:請檢查該Warehouse是否加載了對應的Table Group,若沒有加載,請配置加載Table Group。具體操作,請參見計算組Table Group授權管理

ERRCODE_INSUFFICIENT_PRIVILEGE或者permission denied

權限相關的報錯請參考如下文檔:

ERRCODE_OUT_OF_MEMORY或者OOM

報錯:Total memory used by all existing queries exceeded memory limitation

ERRCODE_DATATYPE_MISMATCH

報錯:internal error: Datasets has different schema

  • 問題原因:Query的列與表中原有的列對不齊。

  • 解決方法:檢查SQL的列是否匹配。

ERRCODE_DIVISION_BY_ZERO

  • 問題原因:SQL中有除法,分母的數據是0,不支持除法中分母為0。

  • 解決方法:

    • 避免分母為0,或者使用CASE WHEN語法繞過。

    • 創(chuàng)建MySQL兼容性插件,開啟允許除以0的開關,詳情請參見遷移MySQL至Hologres

ERRCODE_STRING_DATA_RIGHT_TRUNCATION

報錯:value too long for type character varying(xxx)

  • 問題原因:字段長度超過了VARCHAR類型的長度限制。

  • 解決方法:處理數據或將VARCHAR的長度設置得更長,或者將字段類型改為TEXT。

ERRCODE_PROGRAM_LIMIT_EXCEEDED或者Exceed Odps Scan Limit

報錯:Exceeds the partition limitation of 512, current match xxx partitions.

  • 問題原因:查詢MaxCompute外部表的分區(qū)數量超過了512。

  • 解決方法:增加更多的分區(qū)過濾條件,或者使用如下GUC參數調整分區(qū)查詢限制,詳情請參見常見問題

    set hg_foreign_table_max_partition_limit =xx;

報錯:Build desc failed: Exceeds the scan limitation of 200 GB, current scan xxx GB.

  • 問題原因:掃描的MaxCompute外部表數據量超過200 GB。

  • 解決方法:

    • 增加多個過濾條件,減少掃描數據量。

    • 將數據導入Hologres內部表。內部表沒有數據量的掃描限制。

ERRCODE_SYNTAX_ERROR

報錯:syntax error at or near "xxxxx"

  • 問題原因:SQL語法錯誤。

  • 解決方法:重新檢查SQL語法并修正。

ERRCODE_UNDEFINED_FUNCTION

報錯:DISTINCT is not implemented for window functions

  • 問題原因:Hologres目前不支持在窗口函數中使用DISTINCT關鍵字。

  • 解決方法:窗口函數中去掉DISTINCT。

報錯:ERROR:function xxx does not exist

  • 問題原因:使用函數時未創(chuàng)建對應的extension,或函數語法不滿足規(guī)定。

  • 解決方法:按照Hologres的規(guī)定正確使用函數。

報錯:ERROR: function jsonb_set(json, text[], jsonb, boolean) does not exist

  • 問題原因:JSONB_SET函數傳入的參數類型不匹配導致報錯。

  • 解決方法:JSONB_SET函數第一個參數需要傳入JSONB類型,詳情請參見JSON和JSONB類型

ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED

報錯:You have NO privilege 'odps:Select' on xxx

  • 問題原因:當前賬號沒有MaxCompute表的查詢權限。

  • 解決方法:前往MaxCompute為當前賬號授予相關權限。

報錯:The sensitive label of column 'xxx' is 2, but your effective label is 0

  • 問題原因:當前賬號只有MaxCompute表中部分列的查詢權限。

  • 解決方法:前往MaxCompute為當前賬號授予更多權限,或者只查詢有權限的列。授權詳情請參見通過命令管理用戶權限

ERRCODE_DUPLICATE_OBJECT

報錯:extension "xxxxx" already exists

  • 問題原因:extension已存在,無需重復創(chuàng)建。

  • 解決方法:無需創(chuàng)建已經存在的extension。

ERRCODE_INVALID_TEXT_REPRESENTATION或者invalid input

報錯:invalid input syntax for type numeric: \"\"

  • 問題原因:NUMERIC類型的字段有臟數據,不符合NUMERIC的數據規(guī)范。

  • 解決方法:處理臟數據。

報錯:invalid input syntax for integer: xxx

  • 問題原因:INT類型的字段有臟數據,不符合INT的數據規(guī)范。

  • 解決方法:處理臟數據。

ERRCODE_BAD_COPY_FILE_FORMAT

報錯:missing data for column "xxx". failed to query next

  • 問題原因:執(zhí)行COPY命令時,文件或數據的格式不正確,多發(fā)生于數據本身就包含了COPY指定的分隔符(例如空格),導致列的數量對不上。

  • 解決方法:處理臟數據。

ERRCODE_UNDEFINED_COLUMN

報錯:ERROR: INSERT has more expressions than target columns

  • 問題原因:INSERT寫入的列與目標表的列數不一致。

  • 解決方法:INSERT寫入的列需要與目標表列數保持一致,一一對應。

ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE

報錯:bigint out of range

  • 問題原因:BIGINT類型的數據長度超過了限制。

  • 解決方法:處理臟數據,使其在BIGINT類型的長度范圍內。

報錯:numeric field overflow in function round

  • 問題原因:NUMERIC類型的字段超過了精度限制。

  • 解決方法:處理臟數據。

ERRCODE_DATETIME_FIELD_OVERFLOW

報錯:InsertOverwrite insert select table data failed : column a.unsign_type does not exist

  • 問題原因:列不存在,或者參數填寫錯誤。

  • 解決方法:重新檢查SQL語法并修改。

報錯:mismatched properties: table orientation is "column" but storage format is "sst"

  • 問題原因:建表時屬性填寫錯誤,設置了列存但是存儲模式選擇了SST。

  • 解決方法:檢查SQL語法并修改。

ERRCODE_INVALID_DATETIME_FORMAT

報錯:invalid value "" for "yyyy",Value must be an integer.

  • 問題原因:數據不符合類型規(guī)范。

  • 解決方法:處理臟數據。

ERRCODE_CHARACTER_NOT_IN_REPERTOIRE

報錯:invalid byte sequence for encoding "UTF8": 0xe9 0x80

  • 問題原因:字符不在編碼范圍內,常見于出現了UTF8編碼之外的非法字符。

  • 解決方法:處理臟數據。

ERRCODE_DUPLICATE_TABLE

報錯:relation "xxxx" already exists

  • 問題原因:表已經存在。

  • 解決方法:無需重復創(chuàng)建表。

ERRCODE_UNTRANSLATABLE_CHARACTER

報錯:character with byte sequence 0xe4 0x9e 0xab in encoding "UTF8" has no equivalent in encoding "GBK"

  • 問題原因:表示UTF8編碼的字符在目標GBK格式中無等價項。

  • 解決方法:處理臟數據。

ERRCODE_GROUPING_ERROR

報錯:column "xxx" must appear in the GROUP BY clause or be used in an aggregate function

  • 問題原因:列必須出現在GROUP BY字段中。

  • 解決方法:重新修改SQL語法。

ERRCODE_INVALID_TRANSACTION_STATE

報錯:SET_TABLE_PROPERTY and CREATE TABLE statement are not in the same transaction for table

  • 問題原因:建表時CREATE TABLE和call屬性不在一個事務(transaction)中,導致報錯。

  • 解決方法:建表時CREATE TABLE需要和call屬性放在同一個事務中,示例如下:

    begin;
    CREATE TABLE tbl (
     xxxx
    );
    call set_table_property('tbl', 'orientation', 'xx');
    call set_table_property('tbl', 'distribution_key', 'xxx');
    commit;

ERRCODE_AMBIGUOUS_COLUMN

報錯:column reference "xxx" is ambiguous

  • 問題原因:一般是SQL中存在同名但實際上是不同列的情況時,會出現報錯,例如SELECT id FROM t1 INNER JOIN t2 ON t1.id=t2.id中,SELECT后的id字段沒有指明屬于t1還是t2。

  • 解決方法:重新修改SQL語法。

ERRCODE_DUPLICATE_COLUMN

報錯:column "xxx" specified more than once

  • 問題原因:建表時,一個字段聲明了多次。

  • 解決方法:重新修改SQL語法。

ERRCODE_AMBIGUOUS_FUNCTION

模棱兩可的函數。通常指函數支持多種類型的入參,但傳參的類型未指定清楚。

ERRCODE_INVALID_COLUMN_DEFINITION

報錯:invalid definition of a numeric type

  • 問題原因:建表時,NUMERIC或DECIMAL類型字段未指定精度。

  • 解決方法:重新修改SQL語法,并為NUMERIC或DECIMAL類型字段指定精度。

ERRCODE_CANNOT_COERCE

報錯:cannot cast type date to integer

  • 問題原因:無法將DATE類型轉換為INT類型。

  • 解決方法:重新修改SQL語法。

ERRCODE_UNDEFINED_SCHEMA或者ERRCODE_INVALID_SCHEMA_NAME

報錯:schema "xxxx" does not exist

  • 問題原因:Schema不存在。

  • 解決方法:重新檢查SQL語法是否正常。

ERRCODE_INTERNAL_ERROR

指非預期內的報錯。

報錯:internal error: Connect timeout, err: std_exception: Connection refused

  • 問題原因:通常是由于某種原因導致了實例宕機,從而出現報錯。

  • 解決方法:提交工單排查Hologres實例宕機原因。

報錯:too many shards in this instance

  • 問題原因:當前實例設置的Shard數量超過了實例Shard總數的限制。

  • 解決方法:梳理當前實例的Shard數,不建議設置超過總數的Shard數,詳情請參見實例規(guī)格概述

報錯:internal error: Write is not allowed in readonly mode

  • 問題原因:不支持在從實例中執(zhí)行INSERT、UPDATE或DELETE等操作。

  • 解決方法:從實例中只允許執(zhí)行SELECT操作,其余操作請在主實例中執(zhí)行。

報錯:remaining connection slots are reserved for non-replication superuser connections

  • 問題原因:當前連接數已滿,導致非Superuser賬號無法連接。

  • 解決方法:使用Superuser賬號釋放空閑連接,詳情請參見釋放連接

報錯:Build desc failed: Column type: information_schema.sql_identifier can not translate into hologres type

  • 問題原因:部分系統表的字段類型比較復雜,當前Hologres不支持。

  • 解決方法:不建議將復雜的系統表數據與Hologres表關聯查詢。

報錯:ERROR: commit ddl phase1 failed: DDLWrite is not allowed on replica

  • 問題原因:不支持在從實例中修改IP白名單。

  • 解決方法:需要在主實例中修改IP白名單。

報錯:current transaction is aborted, commands ignored until end of transaction block

  • 問題原因:通常是由于上一個Transaction的命令未執(zhí)行完,又開始執(zhí)行下一個命令導致報錯。如:

    begin;
    create xxxx
    
    begin;
  • 解決方法:執(zhí)行rollback;命令結束當前事務并回滾所有未提交的更改。

報錯:query length xxxxx  exceeded the maximum 102400

  • 問題原因:Query的長度超過了102400字節(jié)的限制。

  • 解決方法:改寫Query,使其長度保持在規(guī)定范圍內。

報錯:Modify record by primary key is not on this table

  • 問題原因:通常是通過Flink寫入數據時選擇了更新模式,但目標表沒有主鍵,導致數據無法更新。

  • 解決方法:為目標表設置合適的主鍵,詳情請參見主鍵Primary Key

報錯:ERROR: xxx for fe ,should not be evaluated

  • 問題原因:通常是使用某個函數查詢系統表導致的報錯。該函數運行在Hologres的引擎,但是系統表的計算不會經過Hologres引擎。所以在執(zhí)行時,將函數直接計算而不經過Hologres引擎,導致了報錯。

  • 解決方法:不建議使用該函數操作Hologres系統表。

如何處理數字開頭的字段?

實時數倉Hologres兼容PostgreSQL,使用語法同PostgreSQL,不支持數字開頭的字段。

如果您使用Hologres時遇到數字開頭的字段,查詢時需要為該字段增加雙引號,示例如下。

select bizdate,"1_day_active_users","7_day_active_users" from t_active_users;

報錯:cannot drop table because other objects depend on it

  • 問題原因:待刪除的表存在相關依賴,例如有視圖使用了該表。

  • 解決方法:先去除相關依賴,再刪除表。

寫入或查詢命令中含有多表Join時報錯: BinaryArray cannot contain more than 2147483646 bytes

  • 問題原因

    Hologres單個字段大小的上限是2 GB,在統計信息未及時更新的情況下,多表Join時生成了不合理的執(zhí)行計劃,從而出現超過2 GB的報錯。

  • 解決方法

    對Join的表執(zhí)行如下命令用于更新表的統計信息。

    analyze <tablename>;

    如果更新表的統計信息后仍然報錯,說明數據中有較大字段,在SQL前使用如下命令添加GUC參數解決。

    set hg_experimental_query_batch_size = 1024;

導入或者查詢數據時報錯:Cannot reserve capacity larger than 2^31 - 1 for binary

  • 問題原因及解決方法

    • 原因一:Hologres單個字段大小的上限為2 GB,在統計信息未及時更新的情況下,不合理的執(zhí)行計劃,從而出現超過2 GB的報錯。

      解決方法:對表執(zhí)行analyze命令,用于更新表的統計信息。

      analyze <tablename>;
    • 原因二:表字段數據量超過2 GB,導致報錯。

      解決方法:在SQL前面添加以下GUC參數以降低每次Query讀取的批次大小。

      set hg_experimental_query_batch_size = 1024;

執(zhí)行SQL時報錯:internal error: Sequence is used out

  • 問題原因:表中有serial類型,serial類型值超過了取值范圍。

  • 解決方法:

    • 如果是serial類型,建議重新建表,并將類型改為bigserial。

    • serial類型在寫入時會獲取表鎖,建議避免使用serial類型。