3131import static io .milvus .param .Constant .DYNAMIC_FIELD_NAME ;
3232
3333public class ParquetUtils {
34- private static void setMessageType (Types .MessageTypeBuilder builder ,
34+ private static void setMessageType (Types .BaseGroupBuilder <?, ?> builder ,
3535 PrimitiveType .PrimitiveTypeName primitiveName ,
3636 LogicalTypeAnnotation logicType ,
3737 CreateCollectionReq .FieldSchema field ,
@@ -75,6 +75,29 @@ public static MessageType parseCollectionSchema(CreateCollectionReq.CollectionSc
7575 }
7676
7777 switch (field .getDataType ()) {
78+ case Bool :
79+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .BOOLEAN , null , field , false );
80+ break ;
81+ case Int8 :
82+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 ,
83+ LogicalTypeAnnotation .IntLogicalTypeAnnotation .intType (8 , true ), field , false );
84+ break ;
85+ case Int16 :
86+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 ,
87+ LogicalTypeAnnotation .IntLogicalTypeAnnotation .intType (16 , true ), field , false );
88+ break ;
89+ case Int32 :
90+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 , null , field , false );
91+ break ;
92+ case Int64 :
93+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT64 , null , field , false );
94+ break ;
95+ case Float :
96+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .FLOAT , null , field , false );
97+ break ;
98+ case Double :
99+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .DOUBLE , null , field , false );
100+ break ;
78101 case FloatVector :
79102 setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .FLOAT , null , field , true );
80103 break ;
@@ -89,10 +112,6 @@ public static MessageType parseCollectionSchema(CreateCollectionReq.CollectionSc
89112 case Array :
90113 fillArrayType (messageTypeBuilder , field );
91114 break ;
92-
93- case Int64 :
94- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT64 , null , field , false );
95- break ;
96115 case VarChar :
97116 case Geometry :
98117 case Timestamptz :
@@ -101,30 +120,14 @@ public static MessageType parseCollectionSchema(CreateCollectionReq.CollectionSc
101120 setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .BINARY ,
102121 LogicalTypeAnnotation .stringType (), field , false );
103122 break ;
104- case Int8 :
105- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 ,
106- LogicalTypeAnnotation .IntLogicalTypeAnnotation .intType (8 , true ), field , false );
107- break ;
108- case Int16 :
109- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 ,
110- LogicalTypeAnnotation .IntLogicalTypeAnnotation .intType (16 , true ), field , false );
111- break ;
112- case Int32 :
113- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 , null , field , false );
114- break ;
115- case Float :
116- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .FLOAT , null , field , false );
117- break ;
118- case Double :
119- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .DOUBLE , null , field , false );
120- break ;
121- case Bool :
122- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .BOOLEAN , null , field , false );
123- break ;
124-
125123 }
126124 }
127125
126+ List <CreateCollectionReq .StructFieldSchema > structFields = collectionSchema .getStructFields ();
127+ for (CreateCollectionReq .StructFieldSchema struct : structFields ) {
128+ fillStructType (messageTypeBuilder , struct );
129+ }
130+
128131 if (collectionSchema .isEnableDynamicField ()) {
129132 messageTypeBuilder .optional (PrimitiveType .PrimitiveTypeName .BINARY ).as (LogicalTypeAnnotation .stringType ())
130133 .named (DYNAMIC_FIELD_NAME );
@@ -134,12 +137,8 @@ public static MessageType parseCollectionSchema(CreateCollectionReq.CollectionSc
134137
135138 private static void fillArrayType (Types .MessageTypeBuilder messageTypeBuilder , CreateCollectionReq .FieldSchema field ) {
136139 switch (field .getElementType ()) {
137- case Int64 :
138- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT64 , null , field , true );
139- break ;
140- case VarChar :
141- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .BINARY ,
142- LogicalTypeAnnotation .stringType (), field , true );
140+ case Bool :
141+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .BOOLEAN , null , field , true );
143142 break ;
144143 case Int8 :
145144 setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 ,
@@ -152,18 +151,63 @@ private static void fillArrayType(Types.MessageTypeBuilder messageTypeBuilder, C
152151 case Int32 :
153152 setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT32 , null , field , true );
154153 break ;
154+ case Int64 :
155+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .INT64 , null , field , true );
156+ break ;
155157 case Float :
156158 setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .FLOAT , null , field , true );
157159 break ;
158160 case Double :
159161 setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .DOUBLE , null , field , true );
160162 break ;
161- case Bool :
162- setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .BOOLEAN , null , field , true );
163+ case VarChar :
164+ setMessageType (messageTypeBuilder , PrimitiveType .PrimitiveTypeName .BINARY ,
165+ LogicalTypeAnnotation .stringType (), field , true );
163166 break ;
164167 }
165168 }
166169
170+ private static void fillStructType (Types .MessageTypeBuilder messageTypeBuilder , CreateCollectionReq .StructFieldSchema struct ) {
171+ Types .BaseListBuilder .GroupElementBuilder <?, ?> groupBuilder = messageTypeBuilder .optionalList ().optionalGroupElement ();
172+ for (CreateCollectionReq .FieldSchema subField : struct .getFields ()) {
173+ switch (subField .getDataType ()) {
174+ case Bool :
175+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .BOOLEAN , null , subField , false );
176+ break ;
177+ case Int8 :
178+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .INT32 ,
179+ LogicalTypeAnnotation .IntLogicalTypeAnnotation .intType (8 , true ), subField , false );
180+ break ;
181+ case Int16 :
182+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .INT32 ,
183+ LogicalTypeAnnotation .IntLogicalTypeAnnotation .intType (16 , true ), subField , false );
184+ break ;
185+ case Int32 :
186+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .INT32 , null , subField , false );
187+ break ;
188+ case Int64 :
189+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .INT64 , null , subField , false );
190+ break ;
191+ case Float :
192+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .FLOAT , null , subField , false );
193+ break ;
194+ case Double :
195+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .DOUBLE , null , subField , false );
196+ break ;
197+ case VarChar :
198+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .BINARY ,
199+ LogicalTypeAnnotation .stringType (), subField , false );
200+ break ;
201+ case FloatVector :
202+ setMessageType (groupBuilder , PrimitiveType .PrimitiveTypeName .FLOAT , null , subField , true );
203+ break ;
204+ default :
205+ break ;
206+ }
207+ }
208+ groupBuilder .named (struct .getName ());
209+ }
210+
167211 public static Configuration getParquetConfiguration () {
168212 // set fs.file.impl.disable.cache to true for this issue: https://github.com/milvus-io/milvus-sdk-java/issues/1381
169213 Configuration configuration = new Configuration ();
0 commit comments