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

通過外表導入至數倉版

如果您需要將OSS中的數據導入至云原生數據倉庫 AnalyticDB MySQL 版,可以參考本文檔,通過外表導入方式將OSS中Parquet、CSV和ORC格式的數據文件導入至數倉版

前提條件

  • AnalyticDB for MySQL集群的產品系列為數倉版

    說明

    數倉版彈性模式集群需要在集群信息頁面的網絡信息區域,打開啟用ENI網絡的開關。

  • AnalyticDB for MySQL集群與OSS存儲空間位于同一地域。具體操作,請參見開通OSS服務

示例數據說明

本示例將oss_import_test_data.csv文件上傳至OSS中的testBucketname/adb/目錄,數據行分隔符為換行符,列分隔符為半角分號(;)。oss_import_test_data.csv文件示例數據如下所示:

uid;other
12;hello_world_1
27;hello_world_2
28;hello_world_3
33;hello_world_4
37;hello_world_5
40;hello_world_6        

操作步驟

  1. AnalyticDB for MySQL中創建數據庫。

    CREATE DATABASE adb_demo;
  2. 創建外表。使用CREATE TABLE語法創建CSV、Parquet或ORC格式的OSS外表。具體語法,請參見OSS外表語法

    本文示例以CSV格式非分區外表為例。

    CREATE TABLE IF NOT EXISTS oss_import_test_external_table
    (
        uid string,
        other string
    )
    ENGINE='OSS'
    TABLE_PROPERTIES='{
        "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
        "url":"oss://testBucketname/adb/oss_import_test_data.csv",
        "accessid":"LTAIF****5FsE",
        "accesskey":"Ccw****iWjv",
        "delimiter":";",
        "skip_header_line_count":1,
        "charset":"utf-8"
    }'; 
  3. 查詢oss_import_test_external_table外表數據。

    說明

    對于CSV格式、Parquet和ORC格式數據文件,數據量越大,通過外表查詢的性能損耗越大。如果您需要進一步提升查詢效率,建議您按照后續步驟(4~5)將OSS外表數據導入AnalyticDB for MySQL后再做查詢。

    SELECT uid, other FROM oss_import_test_external_table WHERE uid < 100 LIMIT 10;
  4. AnalyticDB for MySQL中創建表,用于存儲從OSS外表導入的數據。

    CREATE TABLE IF NOT EXISTS adb_oss_import_test
    (
        uid string,
        other string
    )
    DISTRIBUTED BY HASH(uid);
  5. 執行INSERT語句將OSS外表數據導入AnalyticDB for MySQL

    重要

    使用INSERT INTOINSERT OVERWRITE SELECT導入數據時,默認是同步執行流程。如果數據量較大,達到幾百GB,客戶端到AnalyticDB for MySQL服務端的連接需要保持較長時間。在此期間,可能會因為網絡因素導致連接中斷,進而導致數據導入失敗。因此,如果您的數據量較大時,推薦使用SUBMIT JOB INSERT OVERWRITE SELECT異步執行導入。

    • 方式一:執行INSERT INTO導入數據,當主鍵重復時會自動忽略當前寫入數據,不進行更新覆蓋,作用等同于INSERT IGNORE INTO,詳情請參見INSERT INTO。示例如下:

      INSERT INTO adb_oss_import_test
      SELECT * FROM oss_import_test_external_table;
    • 方式二:執行INSERT OVERWRITE導入數據,會覆蓋表中原有的數據。示例如下:

      INSERT OVERWRITE adb_oss_import_test
      SELECT * FROM oss_import_test_external_table;
    • 方式三:異步執行INSERT OVERWRITE導入數據。 通常使用SUBMIT JOB提交異步任務,由后臺調度,可以在寫入任務前增加Hint(/*+ direct_batch_load=true*/)加速寫入任務。詳情請參見異步寫入。示例如下:

      SUBMIT JOB INSERT OVERWRITE adb_oss_import_test
      SELECT * FROM oss_import_test_external_table;

      返回結果如下:

      +---------------------------------------+
      | job_id                                |
      +---------------------------------------+
      | 2020112122202917203100908203303****** |

      關于異步提交任務詳情,請參見異步提交導入任務

OSS外表語法

OSS非分區外表

CREATE TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='OSS'
TABLE_PROPERTIES='{
    "endpoint":"endpoint",
    "url":"OSS_LOCATION",
    "accessid":"accesskey_id",
    "accesskey":"accesskey_secret",
    "format":"txt|orc|parquet",
    "delimiter":";",
    "skip_header_line_count":1,
    "charset":"utf-8"
}';

外表類型

參數

是否必填

說明

CSV格式、Parquet格式或OSS ORC格式外表

ENGINE='OSS'

表引擎,固定填寫為OSS。

endpoint

OSS的EndPoint(地域節點)。 目前僅支持AnalyticDB for MySQL通過VPC網絡訪問OSS。

說明

您可登錄OSS控制臺,單擊目標Bucket,在Bucket概覽頁面查看EndPoint(地域節點)

url

指定OSS文件或目錄所在的路徑。

  • OSS文件需填寫絕對路徑。例如:oss://testBucketname/adb/oss_import_test_data.csv

  • 目錄路徑以正斜線(/)結尾。例如:oss://testBucketname/adb/

    說明

    若指定為目錄路徑,成功創建外表后,外表中的數據為該文件夾下的所有數據。

  • 路徑末尾支持通配符*,用于匹配該路徑下所有符合該模式的文件或文件夾。例如:oss://testBucketname/adb/list_file_with_prefix/test*

    說明

    該模糊查詢示例將匹配到滿足前綴條件的所有文件和文件夾,例如:oss://testBucketname/adb/list_file_with_prefix/testfile1

    oss://testBucketname/adb/list_file_with_prefix/test1/file2

accessid

阿里云賬號或者具備OSS管理權限的RAM用戶的AccessKey ID。

如何獲取AccessKey ID,請參見賬號與權限

accesskey

阿里云賬號或者具備OSS管理權限的RAM用戶的AccessKey Secret。

如何獲取AccessKey Secret,請參見賬號與權限

CSV格式外表

delimiter

定義CSV數據文件的列分隔符。

Parquet格式、OSS ORC格式外表

format

數據文件的格式。

  • 創建Parquet格式文件的外表時需設置為parquet

  • 創建ORC格式文件的外表時需設置為orc

說明
  • 僅創建OSS Parquet格式或OSS ORC格式外表填寫該參數。

  • 不指定format時,默認格式為CSV。

CSV格式外表

null_value

定義CSV數據文件的NULL值。默認將空值定義為NULL,即"null_value": ""

重要

僅內核版本為3.1.4.2及以上的集群支持配置該參數。

ossnull

選擇CSV數據文件中NULL值的對應規則。取值如下:

  • 1(默認值):表示EMPTY_SEPARATORS,即僅將空值定義為NULL

    示例:a,"",,c --> "a","",NULL,"c"

  • 2:表示EMPTY_QUOTES,即僅將""定義為NULL

    示例:a,"",,c --> "a",NULL,"","c"

  • 3:表示BOTH,即同時將空值和""定義為NULL

    示例:a,"",,c --> "a",NULL,NULL,"c"

  • 4:表示NEITHER,即空值和""均不定義為NULL

    示例:a,"",,c --> "a","","","c"

說明

上述各示例的前提為"null_value": ""

skip_header_line_count

定義導入數據時需要在開頭跳過的行數。CSV文件第一行為表頭,若設置該參數為1,導入數據時可自動跳過第一行的表頭。

默認取值為0,即不跳過。

oss_ignore_quote_and_escape

是否忽略字段值中的引號和轉義。默認取值為false,即不忽略字段值中的引號和轉義。

重要

僅內核版本為3.1.4.2及以上的集群支持配置該參數。

charset

OSS外表字符集,取值說明:

  • utf-8(默認值)

  • gbk

重要

僅內核版本為3.1.10.4及以上的集群支持配置該參數。

說明
  • 外表創建語句中的列名需與Parquet或ORC文件中該列的名稱完全相同(可忽略大小寫),且列的順序需要一致。

  • 創建外表時,可以僅選擇Parquet或ORC文件中的部分列作為外表中的列,未被選擇的列不會被導入。

  • 如果創建外表創建語句中出現了Parquet或ORC文件中不存在的列,針對該列的查詢結果均會返回NULL。

Parquet文件、ORC文件與AnalyticDB for MySQL的數據類型映射關系

Parquet文件與AnalyticDB for MySQL的數據類型映射關系

Parquet基本類型

Parquet的logicalType類型

AnalyticDB for MySQL的數據類型

BOOLEAN

BOOLEAN

INT32

INT_8

TINYINT

INT32

INT_16

SMALLINT

INT32

INT或INTEGER

INT64

BIGINT

FLOAT

FLOAT

DOUBLE

DOUBLE

  • FIXED_LEN_BYTE_ARRAY

  • BINARY

  • INT64

  • INT32

DECIMAL

DECIMAL

BINARY

UTF-8

  • VARCHAR

  • STRING

  • JSON(如果已知Parquet該列內容為JSON格式)

INT32

DATE

DATE

INT64

TIMESTAMP_MILLIS

TIMESTAMP或DATETIME

INT96

TIMESTAMP或DATETIME

重要

Parquet格式外表暫不支持STRUCT類型,會導致建表失敗。

ORC文件與AnalyticDB for MySQL的數據類型映射關系

ORC文件中的數據類型

AnalyticDB for MySQL中的數據類型

BOOLEAN

BOOLEAN

BYTE

TINYINT

SHORT

SMALLINT

INT

INT或INTEGER

LONG

BIGINT

DECIMAL

DECIMAL

FLOAT

FLOAT

DOUBLE

DOUBLE

  • BINARY

  • STRING

  • VARCHAR

  • VARCHAR

  • STRING

  • JSON(如果已知ORC該列內容為JSON格式)

TIMESTAMP

TIMESTAMP或DATETIME

DATE

DATE

重要

ORC格式外表暫不支持LISTSTRUCTUNION等復合類型,會導致建表失敗。ORC格式外表的列使用MAP類型可以建表,但ORC的查詢會失敗。

AnalyticDB for MySQL支持通過OSS的CSV格式的外表讀寫Hive TEXT文件。建表語句如下:

CREATE TABLE adb_csv_hive_format_oss (
  a tinyint,
  b smallint,
  c int,
  d bigint,
  e boolean,
  f float,
  g double,
  h varchar,
  i varchar, -- binary
  j timestamp,
  k DECIMAL(10, 4),
  l varchar, -- char(10)
  m varchar, -- varchar(100)
  n date
) ENGINE = 'OSS' TABLE_PROPERTIES='{
    "format": "csv",
    "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
    "accessid":"LTAIF****5FsE",
    "accesskey":"Ccw****iWjv",
    "url":"oss://testBucketname/adb_data/",
    "delimiter": "\\1",
    "null_value": "\\\\N",
    "oss_ignore_quote_and_escape": "true",
    "ossnull": 2
}';
說明

在創建OSS的CSV格式的外表來讀取Hive TEXT文件時,需注意如下幾點:

  • Hive TEXT文件的默認列分隔符為\1。若您需要通過OSS的CSV格式的外表讀寫Hive TEXT文件,您可以在配置delimiter參數時將其轉義為\\1

  • Hive TEXT文件的默認NULL值為\N。若您需要通過OSS的CSV格式的外表讀寫Hive TEXT文件,您可以在配置null_value參數時將其轉義為 \\\\N

  • Hive的其他基本數據類型(如BOOLEAN)與AnalyticDB for MySQL的數據類型一一對應,但BINARYCHAR(n)VARCHAR(n)類型均對應AnalyticDB for MySQL中的VARCHAR類型。

OSS分區外表

如果OSS數據源是包含分區的,會在OSS上形成一個分層目錄,類似如下內容:

parquet_partition_classic/
├── p1=2020-01-01
│ ├── p2=4
│ │ ├── p3=SHANGHAI
│ │ │ ├── 000000_0
│ │ │ └── 000000_1
│ │ └── p3=SHENZHEN
│ │     └── 000000_0
│ └── p2=6
│     └── p3=SHENZHEN
│         └── 000000_0
├── p1=2020-01-02
│ └── p2=8
│     ├── p3=SHANGHAI
│     │ └── 000000_0
│     └── p3=SHENZHEN
│         └── 000000_0
└── p1=2020-01-03
    └── p2=6
        ├── p2=HANGZHOU
        └── p3=SHENZHEN
            └── 000000_0

上述數據中p1為第1級分區,p2為第2級分區,p3為第3級分區。對應這種數據源,一般都希望以分區的模式進行查詢,那么就需要在創建OSS外表時指明分區列。以Parquet格式為例,創建帶有分區的OSS外表的語句如下:

CREATE TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='OSS'
TABLE_PROPERTIES='{
    "endpoint":"endpoint",
    "url":"OSS_LOCATION",
    "accessid":"accesskey_id",
    "accesskey":"accesskey_secret",
    "format":"parquet",
    "partition_column":"p1, p2, p3"
}';
說明
  • TABLE_PROPERTIES中的partition_column參數用于指定分區列(本例中的p1、p2、p3)。且partition_column參數中的分區列必須按照第1級、第2級、第3級的順序聲明(本例中p1為第1級分區,p2為第2級分區,p3為第3級分區)。

  • 列定義中必須定義分區列(本例中的p1、p2、p3)及類型,且分區列需要置于列定義的末尾。

  • 列定義中分區列的先后順序需要與partition_column中分區列的順序保持一致。

  • 分區列支持的數據類型包括:BOOLEANTINYINTSMALLINTINTINTEGERBIGINTFLOATDOUBLEDECIMALVARCHARSTRINGDATETIMESTAMP

  • 查詢數據時,分區列和其它數據列的展示和用法沒有區別。

  • 不指定format時,默認格式為CSV。

  • 其他參數的詳細說明,請參見參數說明