<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # OceanBase 數據加載技術 OceanBase 支持通過 LOAD DATA 命令加載外部文本文件的內容到數據庫表中。 LOAD DATA語法格式如下: ~~~ LOAD DATA [/*+ parallel(N)*/] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number {LINES | ROWS}] [(col_name_var [, col_name_var] ...)] ~~~ 其中,REPLACE 選項只適用于 MySQL 租戶。 **注意** 要加載的文件必須在該表的主副本所在的 OBServer 上,當前版本不支持從遠程客戶端加載數據。 Load Data 目前可以對CSV格式的文本文件進行導入,整個導入的過程如下: 1. 解析文件:OceanBase 會根據用戶輸入的文件名,讀取文件中的數據,并且根據用戶輸入的并行度來決定并行或者串行解析輸入文件中的數據。 2. 分發數據:由于 OceanBase 是分布式數據庫系統,各個分區的數據可能分布在各個不同的 OBServer 上,Load Data 會對解析出來的數據進行計算,決定數據需要被發送到哪個 OBServer。 3. 插入數據:當目標 OBServer 收到了發送過來的數據之后,在本地執行 INSERT 操作把數據插入到對應的分區當中。 Load Data 提供了很多選項支持用戶不同的需求,目前支持的選項有: * **并行度:**/\*+ parallel(N)\*/選項指定加載數據的并行度,建議使用的值范圍是\[0 - 租戶的最大CPU數\]。例如: ~~~ load data /*+ parallel(4) */infile '/home/admin/a.csv' into table t ~~~ * **輸入文件:**INFILE 'file\_name' 關鍵字指定輸入文件的路徑和文件名,目前 Load Data 只支持加載 OBServer 本地的輸入文件。所以,用戶需要在導入之前把文件拷貝到某一個 OBServer 上,并連接文件所在的 OBServer 運行Load Data 語句。 * **執行權限:**用戶需要授予權限才能訪問機器上的文件,有兩步: 1. 首先修改安全文件所在路徑,設置為空(即無需檢查): 2. `set global secure_file_priv = "";` 3. 對用戶授予 file 權限:執行`grant file on *.* to USER_NAME;` * **重復數據處理:**這部分指定如何處理重復的數據。Replace 表示將表中原有的數據替換成為輸入文件中的數據; Ignore表示忽略掉重復的數據。Load Data 通過表的主鍵來判斷數據是否重復,如果表不存在主鍵,那么 Load Data 語句就無法判斷數據是否重復,Replace 和 Ignore 選項沒有區別。如果用戶不指定這個選項,那么遇到重復數據的時候,Load Data 語句會將出現把錯誤的數據記錄到日志文件中。 * **目標表選項:**INTO TABLE tbl\_name 關鍵字用于指定目標表名稱。Load Data 支持分區表和非分區表。 * **字段格式:**這部分指定輸入文件的各個字段的分隔符選項,通過 Fields | Columns 子句來指定,其中:Terminated By關鍵字用來指定字段的分隔符;Enclosed By 關鍵字指定每個字段的開始和結束是否包含了特定的字符;Escaped By 關鍵字用來指定字段中的通配符。 * **行格式:**這部分指定輸入文件中每一行的開始和結束字符,通過 Lines 子句設置。 其中 Starting By 用于指定每一行開始的字符;Terminated By 用戶指定每一行的結束字符。IGNORE number {LINES | ROWS} 子句指定忽略掉輸入文件的前 number 行數據。 ~~~ load data /*+ parallel(4) */infile '/home/admin/a.csv' into table t fields terminated by ',' lines terminated by '\n'; ~~~ * **列對應關系選項:**這部分用于指定目標表的各個列與輸入文件的字段之間的關系,通過 (col\_name\_var \[, col\_name\_var\] ...) 關鍵字指定。如果用戶沒有指定,默認會將輸入文件中的字段逐個與表中的列進行對應。如果用戶通過col\_name\_or\_user\_var 關鍵字指定輸入文件中的字段與表中列的對應關系,Load Data 會根據指定的列名與表中的列進行對應,沒有被指定的列會取空值,下面是一個基本的示例: ~~~ load data infile '/home/admin/a.csv' into table t (id, names) set dates=CURRENT_TIMESTAMP; ~~~ 如果輸入文件中并沒有包含所有的列,那么缺少的列按照以下的規則會被默認填充: * 字符類型:空字符串 * 數值類型:0 * 日期類型:0000-00-00 如果用戶需要添加空值,請在輸入文件中使用'\\N'。 * **日志文件:**如果導入的過程中出現了錯誤,出現錯誤的 INSERT 語句會被回滾,并且 Load Data 語句會在 OBServer 安裝路徑的 log 子目錄下產生名稱為 obloaddata.log. 的日志文件,以下是一個日志文件的示例: ~~~ Tenant name: mysql File name: /home/admin/a.csv Into table: `test`.`t` Parallel: 1 Batch size: 1000 SQL trace: YD7A20BA65670-0005AADAAA3CAB52 Start time: 2020-07-29 21:08:13.073741 Load query: load data infile '/home/admin/test.csv' into table t fields terminated by ',' lines terminated by '\n' Row ErrCode ErrMsg 1 1062 Duplicated primary key 2 1062 Duplicated primary key ~~~ 日志中會包含 Load Data 產生的任務的基本信息,包含了:租戶名,輸入文件名,目標表名,并行度,使用的 Load Data 命令,并且以行為單位給出具體錯誤的信息。 **示例:通過****Load Data****導入 csv 文件到表****ware2****中** ~~~ [admin@h07g12092.sqa.eu95 /home/admin/csvdata] $more ware__df8f30ac_64e0_474c_9cc4_9919d64c5e4c 2,1200,.0862,L6xwRsbDk,xEdT1jkENtbLwoI1Zb0,NT0j4RCQ4OqrS,vlwzndw2FPrO,XR,063311111 1,1200,.1868,n1P4zYo8OH,jTNkXKWXOdh,lf9QXTXXGoF04IZBkCP7,srRq15uvxe5,GQ,506811111 $obclient -h192.168.1.101 -utpcc@obbmsql -P2881 -p123456 obclient> load data infile '/home/admin/csvdata/ware__df8f30ac_64e0_474c_9cc4_9919d64c5e4c' into table ware2 fields terminated by ',' lines terminated by '\n'; Query OK, 2 rows affected (0.02 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 obclient> select * from ware2\G *************************** 1. row *************************** W_ID: 2 W_YTD: 1200 W_TAX: .0862 W_NAME: L6xwRsbDk W_STREET_1: xEdT1jkENtbLwoI1Zb0 W_STREET_2: NT0j4RCQ4OqrS W_CITY: vlwzndw2FPrO W_STATE: XR W_ZIP: 063311111 *************************** 2. row *************************** W_ID: 1 W_YTD: 1200 W_TAX: .1868 W_NAME: n1P4zYo8OH W_STREET_1: jTNkXKWXOdh W_STREET_2: lf9QXTXXGoF04IZBkCP7 W_CITY: srRq15uvxe5 W_STATE: GQ W_ZIP: 506811111 2 rows in set (0.00 sec) obclient> ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看