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

在本地環境上使用PyODPS

PyODPS是阿里云開發的Python SDK,用于在本地環境上使用MaxCompute服務。本文將介紹如何在本地環境上使用PyODPS進行表操作、數據加載和運行SQL查詢。

前提條件

  • 本地已安裝python環境,且已安裝PyODPS包,參考:安裝PyODPS

  • 已準備數據集pyodps_iris。您可參考使用示例下載數據集、創建pyodps_iris表并寫入數據,文檔中的操作示例即以此表作為示例數據,為您演示基本操作。

主要流程

  1. 打開Python編輯器,并創建一個Python文件。

    說明

    若本地未安裝Python編輯器,可直接創建一個后綴名為.py的文件。

  2. 開發PyODPS任務代碼。

    創建完成后,您可參考下文內容進行簡單示例的操作學習,了解PyODPS的主要能力維度。

    更多PyODPS的使用指導請參見基本操作概述DataFrame概述。您也可以參考示例文檔:使用PyODPS節點進行結巴中文分詞,進行一個端到端的簡單操作。

  3. 本地運行python文件。

創建ODPS入口

您需要手動定義ODPS入口,代碼示例如下。

import os
from odps import ODPS
# 確保 ALIBABA_CLOUD_ACCESS_KEY_ID 環境變量設置為用戶 Access Key ID,
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境變量設置為用戶 Access Key Secret,
o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

其中:

  • ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET:需將該環境變量設置為您的阿里云賬號的AccessKey ID和 AccessKey Secret。環境變量設置方法請參見在Linux、macOS和Windows系統配置環境變量

    說明

    不建議直接使用AccessKey ID和 AccessKey Secret字符串。

  • your-default-projectyour-end-point:需替換為您設置的默認項目名稱與Endpoint信息,各地域的Endpoint請參見Endpoint

執行SQL

您可以在本地PyODPS節點中執行SQL命令,并讀取SQL運行結果。

在PyODPS節點中執行SQL命令

您可以在PyODPS節點中使用傳統模式或查詢加速(MCQA)執行SQL命令,當前主要支持運行DDL、DML類型的SQL命令。與傳統模式相比,加速查詢模式(MCQA)會將作業的運行結果寫入臨時緩存中。當您后續執行相同的查詢作業時,MaxCompute會優先返回緩存中的結果,加快執行速度,相關計費規則請參見計算費用(按量付費),您可根據需要選擇相應的模式執行。

說明

可以執行的SQL語句并非都可以通過入口對象的execute_sql()run_sql()等方法執行。在調用非DDL或非DML語句時,請使用其他方法。例如,調用創建表語句時,請使用create_table方法;調用API命令時,請使用run_xflowexecute_xflow方法。

使用傳統模式執行SQL命令

您可以使用execute_sql()/run_sql()來執行SQL命令,示例如下:

使用create_table方法創建一個新的表。

o.create_table('my_t', 'num bigint, id string', if_not_exists=True)

使用execute_sql方法執行SQL查詢。

result = o.execute_sql('SELECT * FROM pyodps_iris LIMIT 3')
with result.open_reader() as reader:
    for record in reader:
        print(record)

使用加速查詢模式(MCQA)執行SQL命令

MCQA是MaxCompute提供的查詢加速功能,支持使用獨立資源池對中小規模數據進行加速。PyODPS從V0.11.4.1版本開始支持以下列方式通過MCQA執行SQL。

execute_sql_interactive(fallback='all'):通過MCQA執行SQL并返回MCQA Instance。如果MCQA無法執行相應的SQL,會自動回退到傳統模式。此時,函數返回的Instance為回退后的Instance。

o.execute_sql_interactive('SELECT * FROM dual', fallback='all')

如果不希望回退,可以指定參數fallback=False。也可以指定為回退策略(或回退策略的組合,使用逗號分隔的字符串)。可用的策略名如下,默認策略為unsupported,upgrading,noresource,timeout。為使回退一直生效,建議設置為all,即generic,unsupported,upgrading,noresource,timeout的組合。

回退策略

描述

generic

指定時,表示發生未知錯誤時回退到傳統模式。

noresource

指定時,表示發生資源不足問題時回退到傳統模式。

upgrading

指定時,表示升級期間回退到傳統模式。

timeout

指定時,表示執行超時時回退到傳統模式。

unsupported

指定時,表示遇到MCQA不支持的場景時回退到傳統模式。

例如,下述代碼表示通過MCQA執行SQL,如果遇到不支持MCQA的場景或資源不足問題,回退到傳統模式。

 o.execute_sql_interactive('SELECT * FROM dual', fallback="noresource,unsupported")

在PyODPS節點中讀取SQL運行結果

您可以使用open_reader()來讀取SQL命令運行結果。具體操作請參見讀取SQL執行結果

更多PyODPS節點的SQL相關操作詳情請參見SQL

DataFrame

PyODPS提供了DataFrame API,支持您使用DataFrame進行數據處理,更多DataFrame的操作示例請參見DataFrame概述

  • 執行

    DataFrame的執行需要顯式調用立即執行的方法(如executepersist等)。示例代碼如下。

    # 調用立即執行的方法,處理每條Record,打印出表pyodps_iris中iris.sepalwidth小于3的所有數據。
    from odps.df import DataFrame
    iris = DataFrame(o.get_table('pyodps_iris'))
    for record in iris[iris.sepalwidth < 3].execute():  
        print(record)
    
  • 打印詳細信息

    默認情況下,本地環境的PyODPS節點運行過程不會打印Logview等詳細過程。您可以手動設置options.verbose選項,開啟打印Logview等詳細過程。

    from odps import options
    options.verbose = True
    

設置運行參數hints

運行任務時如果需要設置運行時參數,可以通過設置hints參數來實現,參數類型是dict。

o.execute_sql('SELECT * FROM pyodps_iris', hints={'odps.sql.mapper.split.size': 16})

您也可以對全局設置sql.setting,設置后后續每次運行時都會添加相關的運行時參數。

from odps import options
options.sql.settings = {'odps.sql.mapper.split.size': 16}
# 會根據全局配置添加hints
o.execute_sql('SELECT * FROM pyodps_iris')

完整示例

  1. 本地創建test-pyodps-local.py文件。

  2. 寫入示例代碼。

    import os
    from odps import ODPS
    
    # 確保 ALIBABA_CLOUD_ACCESS_KEY_ID 環境變量設置為用戶 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境變量設置為用戶 Access Key Secret,
    o = ODPS(
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        project='your-default-project',
        endpoint='your-end-point',
    )
    
    # 以直接指定字段名以及字段類型的方式創建非分區表my_new_table。
    table = o.create_table('my_new_table', 'num bigint, id string', if_not_exists=True)
    
    # 向非分區表my_new_table中插入數據。
    records = [[111, 'aaa'],
               [222, 'bbb'],
               [333, 'ccc'],
               [444, '中文']]
    o.write_table(table, records)
    
    # 讀取非分區表my_new_table中的數據。
    for record in o.read_table(table):
        print(record[0], record[1])
    
    # 以運行SQL的方式讀取表中的數據。
    result = o.execute_sql('SELECT * FROM pyodps_iris LIMIT 3;', hints={'odps.sql.allow.fullscan': 'true'})
    
    # 刪除表以清除資源。
    table.drop()
    
    print('使用open_reader方式讀取pyodps_iris表數據:')
    
    # 讀取SQL執行結果。
    with result.open_reader() as reader:
        for record in reader:
            print(record[0], record[1])
    
  3. 運行python代碼。

    python test-pyodps-local.py

    運行結果:

    111 aaa
    222 bbb
    333 ccc
    444 中文
    使用open_reader方式讀取pyodps_iris表數據:
    4.9 3.0
    4.7 3.2
    4.6 3.1