1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 | def generar_dataset_autonomas(origin_drilled_hole_container, origin_drilled_hole_blob, origin_mwd_hole_sm_container, origin_mwd_hole_sm_blob, origin_mwd_hole_container, origin_mwd_hole_blob, origin_rig_container, origin_rig_blob, final_container, final_blob, rango_dias):
"""
Función que permite generar un archivo final con los datos de DrilledHoleTransaction, MwdHoleSM, MwdHole y Rig
Parámetros
----------
origin_drilled_hole_container: str
Nombre del contenedor donde se encuentra el archivo DrilledHoleTransaction.
origin_drilled_hole_blob: str
Nombre del archivo DrilledHoleTransaction.
origin_mwd_hole_sm_container: str
Nombre del contenedor donde se encuentra el archivo MwdHoleSM.
origin_mwd_hole_sm_blob: str
Nombre del archivo MwdHoleSM.
origin_mwd_hole_container: str
Nombre del contenedor donde se encuentra el archivo MwdHole.
origin_mwd_hole_blob: str
Nombre del archivo MwdHole.
origin_rig_container: str
Nombre del contenedor donde se encuentra el archivo Rig.
origin_rig_blob: str
Nombre del archivo Rig.
final_container: str
Nombre del contenedor donde se guardará el archivo final.
final_blob: str
Nombre del archivo final.
Returns
-------
None
"""
# Archivo DrilledHoleTransaction
conn_origin_drilled_hole = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_drilled_hole_container, blob_name=origin_drilled_hole_blob)
try:
download_drilled_hole = conn_origin_drilled_hole.download_blob().readall()
data_drilled_hole = json.loads(download_drilled_hole)
df_drilled_hole = pd.DataFrame(data_drilled_hole['values'], columns=data_drilled_hole['headers'])
except:
download_drilled_hole = conn_origin_drilled_hole.download_blob()
df_drilled_hole = pd.read_json(download_drilled_hole, orient='table')
# Archivo MwdHoleSM
conn_origin_mwd_hole_sm = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_mwd_hole_sm_container, blob_name=origin_mwd_hole_sm_blob)
try:
download_mwd_hole_sm = conn_origin_mwd_hole_sm.download_blob().readall()
data_mwd_hole_sm = json.loads(download_mwd_hole_sm)
df_mwd_hole_sm = pd.DataFrame(data_mwd_hole_sm['values'], columns=data_mwd_hole_sm['headers'])
except:
download_mwd_hole_sm = conn_origin_mwd_hole_sm.download_blob()
df_mwd_hole_sm = pd.read_json(download_mwd_hole_sm, orient='table')
# Archivo MwdHole
conn_origin_mwd_hole = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_mwd_hole_container, blob_name=origin_mwd_hole_blob)
try:
download_mwd_hole = conn_origin_mwd_hole.download_blob().readall()
data_mwd_hole = json.loads(download_mwd_hole)
df_mwd_hole = pd.DataFrame(data_mwd_hole['values'], columns=data_mwd_hole['headers'])
except:
download_mwd_hole = conn_origin_mwd_hole.download_blob()
df_mwd_hole = pd.read_json(download_mwd_hole, orient='table')
# Archivo Rig
conn_origin_rig = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_rig_container, blob_name=origin_rig_blob)
try:
download_rig = conn_origin_rig.download_blob().readall()
data_rig = json.loads(download_rig)
df_rig = pd.DataFrame(data_rig['values'], columns=data_rig['headers'])
except:
download_rig = conn_origin_rig.download_blob()
df_rig = pd.read_json(download_rig, orient='table')
"""
Procesamiento de archivos
"""
""" Calculando campos """
df_mwd_hole_sm['Time'] = df_mwd_hole_sm['Time'].astype('datetime64[ns]')
df_mwd_hole_sm['DrillTime'] = (df_mwd_hole_sm.groupby('MwdHoleId')['Time'].transform('max') -
df_mwd_hole_sm.groupby('MwdHoleId')['Time'].transform('min')).dt.total_seconds()/60
df_mwd_hole_sm = df_mwd_hole_sm.groupby(['MwdHoleId','DrillTime'])['Depth'].max().reset_index()
""" Primer cruce """
df_mwd_hole = df_mwd_hole.rename(columns={'Id': 'MwdHoleId'})
df_mwd_hole_full = df_mwd_hole_sm.merge(df_mwd_hole, how='left', left_on=['MwdHoleId'], right_on=['MwdHoleId'], indicator=True)
df_mwd_hole_full = df_mwd_hole_full.drop(columns=['_merge'])
""" Segundo cruce """
df = df_mwd_hole_full.merge(df_rig, how='left', left_on=['RigSerialNumber'], right_on=['SerialNumber'], indicator=True)
df = df.drop(columns=['_merge'])
""" Tercer cruce """
df['RigSerialNumber'] = df['RigSerialNumber'].astype(str)
df_drilled_hole['RigSerialNumber'] = df_drilled_hole['RigSerialNumber'].astype(str)
df_full = df_drilled_hole.merge(df, how='left', left_on=['HoleId', 'RigSerialNumber', 'PreviousStartTime', 'PreviousEndTime'], right_on=['HoleId', 'RigSerialNumber', 'StartLogTime', 'EndLogTime'], indicator=True)
if len(df_full.index) == 0:
columnas = ['Id_x', 'TransactionType', 'TransactionTime', 'UserLogin', 'Comment',
'DrillPlanName', 'HoleId', 'RigSerialNumber', 'PreviousStartTime',
'PreviousEndTime', 'HoleName_x', 'StartHoleTime', 'EndHoleTime',
'EndPointX', 'EndPointY', 'EndPointZ', 'StartPointX', 'StartPointY',
'StartPointZ', 'DrillBitDiameter', 'Status', 'MwdHoleId', 'DrillTime',
'Depth', 'DrillPlanId', 'StartLogTime', 'EndLogTime', 'SampleDistance',
'DrillMethodId', 'HoleName_y', 'Id_y', 'Name', 'SerialNumber',
'RigInformationDate', 'ExportPath', 'RRAStatusId', 'HasGps',
'EquipmentType', 'IsArchived', '_merge']
df = pd.DataFrame(columns=columnas)
blob = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=final_container, blob_name=final_blob)
json_data = df.to_json(index=False, orient='table')
blob.upload_blob(json_data, overwrite=True)
return None
blob = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=final_container, blob_name=final_blob)
json_data = df_full.to_json(index=False, orient='table')
blob.upload_blob(json_data, overwrite=True)
|