表格存储SDK [英] Table Storage SDK
问题描述
我正在尝试使用Python逐行将CSV文件中的某些数据加载到Azure表存储中.字符串列将直接插入,但是源中以2018-02-18T11:29:12.000Z
格式提及的日期列仍将作为字符串加载.这意味着我无法使用日期列查询记录.
I am trying to load some data from a CSV file to Azure table storage row by row using Python. String columns are getting inserted directly but the date column mentioned in the source in the format 2018-02-18T11:29:12.000Z
is still loaded as string. This means I am unable to query the records using date column.
有人可以告诉我是否有一种方法可以为表创建实体定义(列的数据类型)并使用它来加载记录,以避免使用字符串类型加载日期.
Can someone tell me if there is a way to create an entity definition (datatype for columns) for the table and use it to load the records in order to avoid dates loaded with string type?
推荐答案
我尝试重现您的问题,但失败了.我将csv
文件加载到Azure表存储中,并将数据列加载为DataTime
类型.
I tried to reproduce your issue but failed. I loaded my csv
file to Azure Table Storage and the data column loaded as DataTime
Type.
您可以参考以下代码:
我的csv文件:
my csv file:
'tasksSeattle','001','jay1',100,2018-02-18T11:29:12.000Z
'tasksSeattle','002','jay2',100,2018-02-18T11:29:12.000Z
'tasksSeattle','003','jay3',100,2018-02-18T11:29:12.000Z
'tasksSeattle','004','jay4',100,2018-02-18T11:29:12.000Z
'tasksSeattle','005','jay5',100,2018-02-18T11:29:12.000Z
我的python代码:
my python code:
from azure.cosmosdb.table.tableservice import TableService
from azure.cosmosdb.table.models import Entity
import csv
import sys
import codecs
table_service = TableService(connection_string='***')
reload(sys)
sys.setdefaultencoding('utf-8')
filename = "E:/jay.csv"
with codecs.open(filename, 'rb', encoding="utf-8") as f_input:
csv_reader = csv.reader(f_input)
for row in csv_reader:
task = Entity()
task.PartitionKey = row[0]
task.RowKey = row[1]
task.description = row[2]
task.priority = row[3]
task.logtime = row[4]
table_service.insert_entity('tasktable', task)
加载结果:
load result:
希望它对您有帮助.
更新答案:
Update Answer:
如果您在上面的屏幕截图中观察到数据类型"选项框,不难发现表服务数据模型仅支持这8种类型:
If you observe the Data type options box in the screenshot above, it's not hard to see that only those 8 types are supported by the Table Service Data Model:
- Edm.Binary
- Edm.Boolean
- Edm.DateTime
- Edm.Double
- Edm.Guid
- Edm.Int32
- Edm.Int64
- Edm.String
您可以使用提到的entity.x = EntityProperty(EdmType.STRING, 'y')
函数
You could use entity.x = EntityProperty(EdmType.STRING, 'y')
function which is mentioned here to define data types as you want.
请参考以下示例代码:
with codecs.open(filename, 'rb', encoding="utf-8") as f_input:
csv_reader = csv.reader(f_input)
for row in csv_reader:
task = Entity()
task.PartitionKey = row[0]
task.RowKey = row[1]
task.description = row[2]
task.priority = EntityProperty(EdmType.INT32, row[3])
task.logtime = EntityProperty(EdmType.DATETIME, row[4])
table_service.insert_entity('tasktable', task)
仅供参考:
我们可以将字符串转换为datetime并获取日期片段,如下所示:
We could convert the string to datetime and get the date fragments as below:
task.startDateTime = datetime(startDateFrag.year,startDateFrag.month,startDateFrag.day,startDateFrag.hour, startDateFrag.minute,startDateFrag.second)
这篇关于表格存储SDK的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!