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

導入數據并查詢

更新時間:

云原生數據倉庫 AnalyticDB MySQL 版提供多種數據同步方案,可滿足不同場景下的數據同步需求。本文以數據文件存儲在OSS中為例,介紹如何將OSS中的數據文件導入AnalyticDB for MySQLadb_demo數據庫中并進行查詢。

前提條件

  • 通過以下步驟在OSS中創建存儲AnalyticDB for MySQL數據的目錄。

    1. 開通OSS服務。詳情請參見開通OSS服務

    2. 創建存儲空間。詳情請參見控制臺創建存儲空間

      重要

      OSS的存儲空間與AnalyticDB for MySQL所屬地域相同。

    3. 創建目錄。詳情請參見創建目錄

    4. 上傳測試文件。詳情請參見控制臺上傳文件

      本示例將oss_import_test_data.txt文件上傳至OSS中的<bucket-name>.oss-cn-hangzhou.aliyuncs.com/adb/目錄,數據行分隔符為換行符,列分隔符為;,文件示例數據如下所示:

      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
      ...     
  • 根據AnalyticDB for MySQL入門指南,完成創建集群、設置白名單、創建賬號和數據庫等準備工作,詳情請參見數倉版的入門使用流程

操作步驟

  1. 通過CREATE TABLE,在adb_demo數據庫中創建外表。創建CSV、Parquet或TEXT格式OSS外表的建表語法請參見創建OSS外表語法

  2. 查詢OSS數據。

    查詢外表映射表和查詢AnalyticDB for MySQL內表語法沒有區別,您可以方便地直接進行查詢,如本步驟的示例代碼所示。

    select uid, other from oss_import_test_external_table where uid < 100 limit 10;
    • 對于數據量較大的CSV或TEXT數據文件,強烈建議您按照后續步驟導入AnalyticDB for MySQL后再做查詢,否則查詢性能可能會較差。

    • 對于Parquet格式數據文件,直接查詢的性能一般也比較高,您可以根據需要決定是否進一步導入到AnalyticDB for MySQL后再做查詢。

  3. 通過CREATE TABLE,在adb_demo數據庫中創建目標表adb_oss_import_test存儲從OSS中導入的數據。

    CREATE TABLE IF NOT EXISTS adb_oss_import_test
    (
        uid string,
        other string
    )
    DISTRIBUTED BY HASH(uid);                  
  4. 執行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****** |

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

  5. 執行以下命令,查詢adb_oss_import_test表的數據。

    SELECT * FROM adb_oss_import_test;

創建OSS外表語法

  • 創建OSS CSV格式外表

    • 示例的oss_import_test_data.txt文件為CSV格式,本節介紹CSV格式的OSS外表創建語法。

      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://<bucket-name>/adb_data/",
          "accessid":"LTAIF****5FsE",
          "accesskey":"Ccw****iWjv",
          "delimiter":";",
          "skip_header_line_count":1,
      }'; 

      參數

      是否必填

      說明

      ENGINE='OSS'

      必填

      表示該表是外部表,使用的存儲引擎是OSS。

      TABLE_PROPERTIES

      用于告知AnalyticDB for MySQL如何訪問OSS中的數據。

      endpoint

      OSS的EndPoint(地域節點)

      說明

      目前僅支持AnalyticDB for MySQL通過ECS的VPC網絡訪問OSS。

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

      url

      OSS中源數據文件或文件夾的絕對路徑。文件夾絕對路徑以正斜線(/)結尾。

      路徑末尾支持通配符*,用于匹配該路徑下所有符合該模式的文件或文件夾。

      示例:

      • 文件:oss://<bucket-name>/adb/oss_import_test_data.csv

      • 文件夾:oss://<bucket-name>/adb_data/

        說明

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

      • * 模糊查詢:oss://<bucket-name>/adb_data/list_file_with_prefix/test*

        說明

        該模糊查詢示例將匹配到滿足前綴條件的所有文件和文件夾,例如:oss://<bucket-name>/adb_data/list_file_with_prefix/testfile1

        oss://<bucket-name>/adb_data/list_file_with_prefix/test1/file2

      accessid

      您在訪問OSS中的文件或文件夾時所持有的AccessKey ID。

      如何獲取您的AccessKey ID和AccessKey Secret,請參見賬號與權限

      accesskey

      您在訪問OSS中的文件或文件夾時所持有的AccessKey Secret。

      delimiter

      定義CSV數據文件的列分隔符。例如您可以將列分隔符設置為英文逗號(,)。

      null_value

      選填

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

      說明

      AnalyticDB for MySQL集群需為V3.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,即不忽略字段值中的引號和轉義。

      說明

      AnalyticDB for MySQL集群需為V3.1.4.2或以上版本才支持設置該參數。關于版本信息,請參見新功能發布記錄

  • 創建OSS Parquet格式/OSS ORC格式外表

    • 以Parquet格式為例,創建OSS外表的語句如下:

      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://<bucket-name>/adb_data/",
          "accessid":"LTAIF****5FsE",
          "accesskey":"Ccw****iWjv",
          "format":"parquet"
      }';

      參數

      說明

      ENGINE= 'OSS'

      表示該表是外部表,使用的存儲引擎是OSS。

      TABLE_PROPERTIES

      用于告知AnalyticDB for MySQL如何訪問OSS中的數據。

      endpoint

      OSS的EndPoint(地域節點)(域名節點)。

      說明

      目前僅支持AnalyticDB for MySQL通過OSS中ECS的VPC網絡(內網)訪問OSS。

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

      url

      OSS中源數據文件或文件夾的絕對路徑。建議文件夾絕對路徑以正斜線(/)結尾。

      示例:

      • 文件:oss://<bucket-name>/adb/oss_import_test_data.parquet

      • 文件夾:oss://<bucket-name>/adb_data/

      說明
      • 建表時請將示例中的url替換為實際的OSS路徑。

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

      accessid

      您在訪問OSS中的文件或文件夾時所持有的AccessKey ID。

      如何獲取您的AccessKey ID和AccessKey Secret,請參見賬號與權限

      accesskey

      您在訪問OSS中的文件或文件夾時所持有的AccessKey Secret。

      format

      數據文件的格式。

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

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

      說明

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

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

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

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

      創建Parquet格式文件的外表時,需要注意數據類型的對應關系,具體規則如下:

      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類型,會導致建表失敗。

針對帶有分區的Parquet或CSV數據文件創建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 oss_parquet_partition_table
(
  uid varchar,
  other varchar,
  p1 date,
  p2 int,
  p3 varchar
)
ENGINE='OSS'
TABLE_PROPERTIES='{
  "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
  "url":"oss://<bucket-name>/adb/oss_parquet_data_dir",
  "accessid":"LTAIF****5FsE",
  "accesskey":"Ccw****iWjv",
  "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。

相關文檔

更多導入數據方式,請參見支持的數據源