Bu konu, OSS SDK for Python içindeki SelectObject özelliğini kullanarak CSV ve JSON nesnelerinin nasıl sorgulanacağını açıklar.
Notlar
Bu konuda Çin (Hangzhou) bölgesinin genel uç noktası kullanılmıştır. OSS ile aynı bölgedeki diğer Alibaba Cloud hizmetlerinden OSS'e erişmek için dahili bir uç nokta kullanın. OSS bölgeleri ve uç noktaları hakkında daha fazla bilgi için bkz. Bölgeler ve uç noktalar.
Bu konuda bir OSS uç noktası kullanarak bir OSSClient örneğinin nasıl oluşturulacağı gösterilmektedir. Özel bir alan adı kullanma veya Security Token Service (STS) kimlik bilgileriyle kimlik doğrulama gibi alternatif yapılandırmalar için bkz. Başlatma.
Nesneleri sorgulamak için
oss:GetObjectiznine sahip olmanız gerekir. Daha fazla bilgi için bkz. Özel bir ilke atama.SelectObject kullanılarak yalnızca CSV ve JSON formatındaki nesneler sorgulanabilir.
Örnekler
Aşağıdaki kod, CSV ve JSON nesnelerinin nasıl sorgulanacağına ilişkin bir örnek sunar:
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def select_call_back(consumed_bytes, total_bytes = None):
print('Consumed Bytes:' + str(consumed_bytes) + '\n')
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
key ='python_select.csv'
content ='Tom Hanks,USA,45\r\n'*1024
filename ='python_select.csv'
# Upload a CSV file.
bucket.put_object(key, content)
# Configure the parameters for the SelectObject operation.
csv_meta_params = {'RecordDelimiter': '\r\n'}
select_csv_params = {'CsvHeaderInfo': 'None',
'RecordDelimiter': '\r\n',
'LineRange': (500, 1000)}
csv_header = bucket.create_select_object_meta(key, csv_meta_params)
print(csv_header.rows)
print(csv_header.splits)
result = bucket.select_object(key, "select * from ossobject where _3 > 44", select_call_back, select_csv_params)
select_content = result.read()
print(select_content)
result = bucket.select_object_to_file(key, filename,
"select * from ossobject where _3 > 44", select_call_back, select_csv_params)
bucket.delete_object(key)
###JSON DOCUMENT
key = 'python_select.json'
content = "{\"contacts\":[{\"key1\":1,\"key2\":\"hello world1\"},{\"key1\":2,\"key2\":\"hello world2\"}]}"
filename = 'python_select.json'
# Upload a JSON DOCUMENT object.
bucket.put_object(key, content)
select_json_params = {'Json_Type': 'DOCUMENT'}
result = bucket.select_object(key, "select s.key2 from ossobject.contacts[*] s where s.key1 = 1", None, select_json_params)
select_content = result.read()
print(select_content)
result = bucket.select_object_to_file(key, filename,
"select s.key2 from ossobject.contacts[*] s where s.key1 = 1", None, select_json_params)
bucket.delete_object(key)
###JSON LINES
key = 'python_select_lines.json'
content = "{\"key1\":1,\"key2\":\"hello world1\"}\n{\"key1\":2,\"key2\":\"hello world2\"}"
filename = 'python_select.json'
# Upload a JSON LINES object.
bucket.put_object(key, content)
select_json_params = {'Json_Type': 'LINES'}
json_header = bucket.create_select_object_meta(key,select_json_params)
print(json_header.rows)
print(json_header.splits)
result = bucket.select_object(key, "select s.key2 from ossobject s where s.key1 = 1", None, select_json_params)
select_content = result.read()
print(select_content)
result = bucket.select_object_to_file(key, filename,
"select s.key2 from ossobject s where s.key1 = 1", None, select_json_params)
bucket.delete_object(key)
Python SelectObject
Bu bölümde, Python'daki SelectObject işleminde kullanılan öğeler açıklanmaktadır. Bu öğeler arasında select_object, select_object_to_file ve create_select_object_meta bulunur.
-
select_object
-
Aşağıdaki kod, select_object için parametrelerin nasıl belirtileceğine ilişkin bir örnek sunar:
def select_object(self, key, sql, progress_callback=None, select_params=None byte_range=None headers=None ):Yukarıdaki kod örneği, belirtilen anahtara sahip nesne üzerinde bir SQL deyimi yürütmek ve sorgu sonuçlarını döndürmek için kullanılır.
sql: Base64 kodlaması gerektirmeyen SQL deyimi.
Progress_callback: İsteğe bağlıdır. Bu parametre, sorgu ilerlemesini bildirmek için kullanılan bir geri arama işlevini belirtir.
select_params: SelectObject işleminin parametreleri ve eylemleri.
headers: İsteğe dahil edilen üst bilgi. Üst bilgi, GetObject işlemiyle aynı işlevi görür. Örneğin, sorgulanacak CSV nesnesinin aralığını belirtmek için istek üst bilgisindeki bytes alanını yapılandırabilirsiniz.
-
Aşağıdaki tabloda select_params tarafından desteklenen parametreler açıklanmaktadır.
Parametre
Açıklama
Json_Type
-
Bu parametre belirtilmezse nesne varsayılan olarak bir CSV nesnesidir.
-
Bu parametre DOCUMENT olarak ayarlanırsa nesne bir JSON Document nesnesidir.
-
Bu parametre LINES olarak ayarlanırsa nesne bir JSON LINES nesnesidir.
CsvHeaderInfo
CSV nesnesinin üst bilgisi.
Geçerli değerler: None, Ignore ve Use.
-
None: Bu nesnede yapılandırılmış üst bilgi yoktur.
-
Ignore: Bu nesnede yapılandırılmış üst bilgi vardır ancak SQL deyimi yürütülürken bu bilgiler kullanılmaz.
-
Use: Bu nesnede yapılandırılmış üst bilgi vardır ve SQL deyimi yürütülürken üst bilgilere ait sütun adları kullanılır.
CommentCharacter
CSV nesnesindeki yorum karakteri. Bu parametrenin değeri yalnızca bir karakter uzunluğunda olabilir. Varsayılan değer None'dır; bu, yorum karakterlerine izin verilmediği anlamına gelir.
RecordDelimiter
CSV nesnesindeki satır sınırlayıcısı. Bu parametrenin değeri yalnızca bir veya iki karakter uzunluğunda olabilir. Varsayılan değer: \n.
OutputRecordDelimiter
SELECT deyiminin çıkış sonucundaki satır sınırlayıcısı. Varsayılan değer: \n.
FieldDelimiter
CSV nesnesindeki sütun sınırlayıcısı. Bu parametrenin değeri yalnızca bir karakter uzunluğunda olabilir. Varsayılan değer virgüldür (,).
OutputFieldDelimiter
SELECT deyiminin çıkış sonucundaki sütun sınırlayıcısı. Varsayılan değer virgüldür (,).
QuoteCharacter
CSV nesnesindeki sütunlar için tırnak karakteri. Bu parametrenin değeri yalnızca bir karakter uzunluğunda olabilir. Varsayılan değer çift tırnaktır ("). Tırnak karakterleri içine alınan satır ve sütun sınırlayıcıları normal karakterler olarak işlenir.
SplitRange
Çok parçalı sorgudaki bölüm aralığı. Bu parametrenin değeri, sorgulanacak bölüm aralığını belirten (başlangıç, bitiş) formatında kapalı bir aralıktır.
LineRange
Çok parçalı sorgudaki satır aralığı. Bu parametrenin değeri, sorgulanacak satır aralığını belirten (başlangıç, bitiş) formatında kapalı bir aralıktır.
CompressionType
Nesnenin sıkıştırıldığı format. Geçerli değerler: GZIP ve None. Varsayılan değer: None.
KeepAllColumns
Bu parametre true olarak ayarlanırsa CSV nesnesindeki SELECT deyimi tarafından hariç tutulan sütunlar çıkış sonucunda boş bırakılır. Ancak sütun konumları korunur. Varsayılan değer: False.
Örneğin, CSV nesnesindeki sütunlar firstname, lastname ve age şeklindedir. SQL deyimi select firstname, age from ossobject şeklindedir.
-
KeepAllColumns değeri true olarak ayarlanırsa çıkış sonucu firstname,,age şeklinde olur; burada hariç tutulan lastname sütununun konumunu belirtmek için ekstra bir virgül (,) eklenir.
-
KeepAllColumns değeri false olarak ayarlanırsa çıkış sonucu firstname,age şeklinde olur.
NotBu parametre, GetObject işlemini işlemek için kullanılan kodun SelectObject işlemini değiştirmeden işlemesine olanak sağlamak amacıyla tasarlanmıştır.
OutputRawData
-
Bu parametre True olarak ayarlanırsa SelectObject ham verileri doğrudan döndürür. Veriler uzun süre döndürülmezse zaman aşımı hatası oluşabilir.
-
Bu parametre False olarak ayarlanırsa çıkış verileri çerçeveler halinde paketlenir. Varsayılan değer: False.
EnablePayloadCrc
Her çerçeve için bir döngüsel artıklık denetimi (CRC) değeri hesaplanıp hesaplanmayacağını belirtir. Varsayılan değer: False.
OutputHeader
Çıkış sonucunun ilk satırındaki üst bilgi. Bu parametre yalnızca CSV nesneleri için geçerlidir.
SkipPartialDataRecord
Bir CSV nesnesi için bu parametre True olarak ayarlanırsa kaydın bir sütununda veri olmadığında mevcut kayıt atlanır. Bir JSON nesnesi için bu parametre True olarak ayarlanırsa kaydın bir anahtarı mevcut olmadığında mevcut kayıt atlanır. Bu parametre False olarak ayarlanırsa verisiz bir sütun çıkış sonucunda boş bırakılır.
Örneğin, bir satır firstname, lastname ve age sütunlarını içerir. SQL deyimi
select _1, _4 from ossobjectşeklindedir.-
Bu parametre True olarak ayarlanırsa bu satır atlanır.
-
Bu parametre False olarak ayarlanırsa firstname,\n döndürülür.
MaxSkippedRecordsAllowed
Atlanabilecek maksimum satır sayısı. Varsayılan değer 0'dır; bu, bir satır atlandığında hata döndürüleceği anlamına gelir.
ParseJsonNumberAsString
-
Bu parametre True olarak ayarlanırsa JSON nesnesindeki tüm sayılar dize olarak ayrıştırılır.
-
Bu parametre False olarak ayarlanırsa JSON nesnesindeki tüm sayılar tamsayı veya kayan noktalı sayı olarak ayrıştırılır. Varsayılan değer: False.
JSON nesnesindeki yüksek hassasiyetli kayan noktalı sayılar, kayan noktalı sayı olarak ayrıştırıldığında hassasiyet kaybına uğrar. Hassasiyeti korumak için bu parametreyi True olarak ayarlayabilir ve ayrıştırılan verileri ondalık türe dönüştürmek için CAST işlevini kullanabilirsiniz.
-
-
select_object tarafından döndürülen sonuçlar: Bir SelectObjectResult nesnesi döndürülür. Tüm sonuçları almak için read() işlevini veya _iter_ yöntemini kullanabilirsiniz.
NotBirden çok sonuç döndürüldüğünde tüm sonuçları okumak için read() işlevini çağırırsanız aşırı bellek kaynağı kullanılır ve uzun süre beklemeniz gerekir. Sonuçları almak ve sonuçlardaki her bir yığını işlemek için _iter_ yöntemini (foreach chunk in result) kullanmanızı öneririz. _iter_ yöntemi bellek kullanımını azaltır ve istemcinin OSS sunucusu tarafından işlenen her bir yığın isteğini zamanında işlemesine olanak tanır. Bu şekilde istemcinin tüm sonuçlar döndürülene kadar beklemesi gerekmez.
-
-
select_object_to_file
def select_object_to_file(self, key, filename, sql, progress_callback=None, select_params=None headers=None ):Yukarıdaki kod örneği, belirtilen anahtara sahip nesne üzerinde bir SQL deyimi yürütmek ve sorgu sonuçlarını başka bir belirtilen nesneye yazmak için kullanılır.
Diğer parametreler select_object ile aynıdır.
-
create_select_object_meta
-
create_select_object_meta sözdizimi
def create_select_object_meta(self, key, select_meta_params=None, header=None):Yukarıdaki kod örneği, belirtilen anahtara sahip nesne için Select Meta oluşturmak veya böyle bir nesneden Select Meta almak için kullanılır. Select Meta; bir nesnedeki toplam satır sayısını, toplam sütun sayısını (CSV nesneleri için) ve toplam bölüm sayısını içerir.
Bir nesne için Select Meta zaten oluşturulmuşsa OverwriteIfExists parametresi true olarak ayarlanmadığı sürece bu işlev Select Meta'yı yeniden oluşturmaz.
Bir nesne için Select Meta oluşturmak üzere nesnenin tamamen taranması gerekir.
-
Aşağıdaki tabloda select_meta_params tarafından desteklenen parametreler açıklanmaktadır.
Parametre
Açıklama
Json_Type
-
Bu parametre belirtilmezse nesne varsayılan olarak bir CSV nesnesidir.
-
Bu parametre belirtilirse değeri LINES olmalıdır; bu, nesnenin bir JSON LINES nesnesi olduğunu gösterir.
NotBu işlem JSON Document nesneleri için geçerli değildir.
RecordDelimiter
CSV nesnesindeki satır sınırlayıcısı.
FieldDelimiter
CSV nesnesindeki sütun sınırlayıcısı.
QuoteCharacter
CSV nesnesindeki tırnak karakteri. Tırnak karakterleri içine alınan satır ve sütun sınırlayıcıları normal karakterler olarak işlenir.
CompressionType
Nesnenin sıkıştırıldığı format. Hiçbir sıkıştırma formatı desteklenmez. Varsayılan değer None'dır.
OverwriteIfExists
Oluşturulan Select Meta'nın orijinal Select Meta'nın üzerine yazılıp yazılmayacağını belirtir. Çoğu durumda bu parametreyi ayarlamanız gerekmez.
-
create_select_object_meta tarafından döndürülen sonuçlar: rows ve splits niteliklerini içeren bir GetSelectObjectMetaResult nesnesi döndürülür. Bir CSV nesnesi için sonuçtaki select_resp nesnesi, CSV nesnesindeki sütun sayısını belirten columns niteliğini içerir.
-
İlgili Konular
Nesneleri sorgulamak için kullanılan tam örnek kod için GitHub adresini ziyaret edin.
Nesneleri sorgulamak için çağırabileceğiniz API işlemi hakkında daha fazla bilgi için bkz. SelectObject.