[ 
https://issues.apache.org/jira/browse/SPARK-27388?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Taoufik DACHRAOUI updated SPARK-27388:
--------------------------------------
    Description: 
*What changes were proposed in this pull request?*

This PR adds expression encoders for beans, java.util.List, java.util.Map and 
java enum.

The Beans are objects defined by properties; A property is defined by a setter 
and a getter functions where the getter return type is equal to the setter 
unique parameter type and the getter and setter functions have the same name; 
if the getter name is prefixed by "get" then the setter name must be prefixed 
by "set"; see tests for bean examples.

Avro objects are beans and thus we can create an expression encoder for avro 
objects as follows:
{code:java}
implicit val exprEncoder = ExpressionEncoder[Foo]()
{code}
All avro types, including fixed types, and excluding complex union types, are 
suppported by this addition.

The avro fixed types are beans with exactly one property: bytes.

Currently complex avro unions are not supported because a complex union is 
declared as Object and there cannot be an expression encoder for Object type 
(need to use a custom serializer like kryo for example)

*How was this patch tested?*

currently only 1 encodeDecodeTest was added to ExpressionEncoderSuite; the test 
uses an avro object with map, array and fixed fields, as in the test 3 (below).

I used the modified spark-sql package in a local project to test it

the tests are as follows (where Barcode is a large Avro object):

1. test with simple beans
{code:java}
class Bar {
  private var bar$: String = _
  def bar(value: String): Unit = {
    bar$ = value
  }
  def bar(): String = bar$
  override def toString() = { s"Bar($bar)" }
}

class Foo extends Bar {
  var a: Int = _
  var b: Bar = _

  def getA() = a

  def setA(x: Int) {
    a = x
  }
  def getB(): Bar = b

  def setB(x: Bar) {
    b = x
  }
  override def toString() = { s"Foo($a,$b, ${bar()})" }
}

{code}
{code:java}
    implicit val encoderFoo = ExpressionEncoder[Foo]
    val bar = new Bar
    bar.bar("ok")
    val a = new Foo
    a.setA(55)
    a.setB(bar)
    a.bar("BAR")
    val ds = List(a).toDS()
    println(ds.collect().toList)

    val df = List(a).toDF()

    val r = df.collect().foreach(println)

    println(df.schema)

Result => 

List(Foo(55,Bar(ok), BAR))
[[ok],55,BAR]
StructType(StructField(B,StructType(StructField(bar,StringType,true)),true), 
StructField(A,IntegerType,false), StructField(bar,StringType,true))

{code}
2. test with a large Avro schema (Barcode) with nested avro objects, java enums 
and arrays:
{code:java}
    implicit val barcodeEncoder = ExpressionEncoder[Barcode]()

    val ds: Dataset[Barcode] = 0.until(10000).map(i => {
      val crpAddDesc = new java.util.ArrayList[CrpAddDesc]()
      crpAddDesc.add(CrpAddDesc.newBuilder()
        .setCrpAddEngDesc(s"Crp description1 $i")
        .build())
      crpAddDesc.add(CrpAddDesc.newBuilder()
        .setCrpAddEngDesc(s"Crp description2 $i")
        .build())
      val crpAttrs = new java.util.ArrayList[CrpAttributes]()
      crpAttrs.add(CrpAttributes.newBuilder()
        .setCrpCode(s"crp attr1 $i")
        .setCrpAddDesc(crpAddDesc)
        .build())
      crpAttrs.add(CrpAttributes.newBuilder()
        .setCrpCode(s"crp attr2 $i")
        .build())
      val barcode = Barcode.newBuilder()
        .setBarcode(s"Bar$i")
        .setPrdTaxVal(Money.newBuilder()
          .setUnscaledAmount(i.toLong)
          .setScale(0)
          .setCurrency(Currency.EUR)
          .setCurrencyAlphaCode("EUR")
          .build())
        .setCrpAttributes(crpAttrs)
        .build()
      barcode
    })
      .toDS()

    val x = ds.map(a => {
      (
        a.getBarcode,
        a.getPrdTaxVal.getCurrency,
        a.getCrpAttributes.get(0).getCrpCode,
        a.getCrpAttributes.get(1).getCrpCode)
    })
   
    println(x.collect().toList.drop(100).head)

result => (Bar100,EUR,crp attr1 100,crp attr2 100)
{code}
3. test with Avro schema having map, array and fixed types
{code:java}
    implicit val logEncoder = ExpressionEncoder[Log]()
    val ds: Dataset[Log] = List(Log.newBuilder()
      .setIps(List("127.0.0.1", "127.0.0.0").asJava)
      .setAdditional(Map(
        "foo" -> new java.lang.Integer(1),
        "bar" -> new java.lang.Integer(2)).asJava)
      .setTimestamp("12345678")
      .setMessage("test map")
      .setMagic(new Magic("magic".getBytes))
      .build())
      .toDS()

    println(ds.collect().toList)

result: List({"ips": ["127.0.0.1", "127.0.0.0"], "timestamp": "12345678", 
"message": "test map", "magic": [109, 97, 103, 105, 99], "additional": {"foo": 
1, "bar": 2}})

{code}
Log Avro schema:
{code:java}
{"namespace": "example.avro", "type": "record", "name": "Log",
         "fields": [ {"name": "ips", "type": {"type": "array", "items": 
"string"}},
             {"name": "timestamp", "type": "string"},
             {"name": "message", "type": "string"},
             {"name": "magic", "type": {"type": "fixed", "name": "Magic", 
"size": 4}},
             {"name": "additional", "type": {"type": "map", "values": "int"}} ] 
}

{code}
Barcode Avro schema:
{code:java}
{"type":"record","name":"Barcode","namespace":"referential.product.v2","doc":"Barcode
 Pivot","fields":[{"name":"barcode","type":["null","string"],"doc":"Barcode of 
the 
product","default":null},{"name":"transBarcode","type":["null","string"],"doc":"Origin
 
EAN13","default":null},{"name":"barcodeType","type":["null","string"],"doc":"Barcode
 
type","default":null},{"name":"itemKey","type":["null","string"],"doc":"Internal
 Code of the 
Product","default":null},{"name":"itemDesc","type":["null","string"],"doc":"Description
 of the 
product","default":null},{"name":"itemDesc18","type":["null","string"],"doc":"Description
 of the product (18c) on the 
ticket","default":null},{"name":"mainItemKey","type":["null","string"],"doc":"Item
 code of the parent product 
(ifexists)","default":null},{"name":"mainBarcode","type":["null","string"],"doc":"Main
 Barcode of the 
product","default":null},{"name":"mainSupplierKey","type":["null","string"],"doc":"Identifier
 of the Main 
Supplier","default":null},{"name":"supplierKey","type":["null","string"],"doc":"Identifier
 of the 
supplier","default":null},{"name":"itemType","type":["null","string"],"doc":"Type
 of item : [D] Direct, [L] Logistique, [M] Mix , [XD] Cross-docking, [PCK] 
Picking, [FT] Flow Through, [VFT] Virtual Flow Through [HD] Home 
Delivery","default":null},{"name":"brandTypeKey","type":["null","string"],"doc":"ID
 for the BrandType 
(MD,MN,PP)(seevalues)","default":null},{"name":"brandTypeDesc","type":["null","string"],"doc":"Description
 for the Brand 
Type","default":null},{"name":"createDate","type":["null","string"],"doc":"Creation
 
date","default":null},{"name":"updateDate","type":["null","string"],"doc":"Update
 
date.(YYYYMMDD)","default":null},{"name":"deleteDate","type":["null","string"],"doc":"Delete
 
Date","default":null},{"name":"nonActiveDate","type":["null","string"],"doc":"Non
 active 
date(YYYYMMDD)","default":null},{"name":"prdStopFlag","type":["null","string"],"doc":"Flag
 STOP PRODUC T(for the sales and the 
purchase)","default":null},{"name":"salStopFlag","type":["null","string"],"doc":"Flag
 STOP ITEM on 
sales","default":null},{"name":"purStopFlag","type":["null","string"],"doc":"Flag
 STOP ITEM on 
purchase","default":null},{"name":"prdVatPct","type":["null","double"],"doc":"VAT
 
percentage","default":null},{"name":"prdTaxVal","type":["null",{"type":"record","name":"Money","namespace":"common.lib.v1","fields":[{"name":"unscaledAmount","type":"long","default":0},{"name":"scale","type":"int","default":0},{"name":"currency","type":{"type":"enum","name":"Currency","symbols":["EUR","USD","BRL"]},"default":"EUR"},{"name":"currencyAlphaCode","type":["null","string"],"default":null}]}],"doc":"Other
 taxes 
amount","default":null},{"name":"prdVigVal","type":["null","common.lib.v1.Money"],"doc":"Vignette
 
amount","default":null},{"name":"prdDutyVal","type":["null","common.lib.v1.Money"],"doc":"Duty
 
amount","default":null},{"name":"prdUnitType","type":["null","string"],"doc":"Reference
 nature 
code","default":null},{"name":"frRacCode","type":["null","string"],"doc":"RAC 
code of the product 
(ANABEL2)","default":null},{"name":"npceBaseRist","type":["null","common.lib.v1.Money"],"doc":"Net
 price without tax for margin 
computation","default":null},{"name":"frTheoSrpPceOrig","type":["null","common.lib.v1.Money"],"doc":"Theoretical
 Break Even Price (SRP) without 
tax","default":null},{"name":"frTheoSrpPceMod","type":["null","common.lib.v1.Money"],"doc":"Theoretical
 Break Even Price (SRP) updated by 
RSRP+RFA","default":null},{"name":"structHyp","type":["null",{"type":"record","name":"ProductStructHyp","doc":"Product
 HyperMarket 
Structure","fields":[{"name":"hypUbKey","type":["null","string"],"doc":"Identifier
 of the UB 
(HyperMarket)","default":null},{"name":"hypUbDesc","type":["null","string"],"doc":"Description
 of the UB 
(HyperMarket)","default":null},{"name":"hypSubClassKey","type":["null","string"],"doc":"Identifier
 of the Sub Class 
(HyperMarket)","default":null},{"name":"hypSubClassDesc","type":["null","string"],"doc":"Description
 of the Sub Class 
(HyperMarket)","default":null},{"name":"hypClassKey","type":["null","string"],"doc":"Identifier
 of the Class 
(HyperMarket)","default":null},{"name":"hypClassDesc","type":["null","string"],"doc":"Description
 of the Class 
(HyperMarket)","default":null},{"name":"hypGrpClassKey","type":["null","string"],"doc":"Identifier
 of the Group Class 
(HyperMarket)","default":null},{"name":"hypGrpClassDesc","type":["null","string"],"doc":"Description
 of the Group Class 
(HyperMarket)","default":null},{"name":"hypDepartmentKey","type":["null","string"],"doc":"Identifier
 of the Department 
(HyperMarket)","default":null},{"name":"hypDepartmentDesc","type":["null","string"],"doc":"Description
 of the Department 
(HyperMarket)","default":null},{"name":"hypSectorKey","type":["null","string"],"doc":"Identifier
 of the Sector 
(HyperMarket)","default":null},{"name":"hypSectorDesc","type":["null","string"],"doc":"Description
 of the Sector (HyperMarket)","default":null}]}],"doc":"Structure 
Hyper","default":null},{"name":"structSup","type":["null",{"type":"record","name":"ProductStructSup","doc":"Product
 SuperMarket 
Structure","fields":[{"name":"supUbKey","type":["null","string"],"doc":"Identifier
 of the UB 
(SuperMarket)","default":null},{"name":"supUbDesc","type":["null","string"],"doc":"Description
 of the UB 
(SuperMarket)","default":null},{"name":"supSubClassKey","type":["null","string"],"doc":"Identifier
 of the Sub Class 
(SuperMarket)","default":null},{"name":"supSubClassDesc","type":["null","string"],"doc":"Description
 of the Sub Class 
(SuperMarket)","default":null},{"name":"supClassKey","type":["null","string"],"doc":"Identifier
 of the Class 
(SuperMarket)","default":null},{"name":"supClassDesc","type":["null","string"],"doc":"Description
 of the Class 
(SuperMarket)","default":null},{"name":"supGrpClassKey","type":["null","string"],"doc":"Identifier
 of the Group Class 
(SuperMarket)","default":null},{"name":"supGrpClassDesc","type":["null","string"],"doc":"Description
 of the Group Class 
(SuperMarket)","default":null},{"name":"supDepartmentKey","type":["null","string"],"doc":"Identifier
 of the Department 
(SuperMarket)","default":null},{"name":"supDepartmentDesc","type":["null","string"],"doc":"Description
 of the Department 
(SuperMarket)","default":null},{"name":"supSectorKey","type":["null","string"],"doc":"Identifier
 of the Sector 
(SuperMarket)","default":null},{"name":"supSectorDesc","type":["null","string"],"doc":"Description
 of the Sector (SuperMarket)","default":null}]}],"doc":"Structure 
Super","default":null},{"name":"structPrx","type":["null",{"type":"record","name":"ProductStructPrx","doc":"Product
 Proxi 
Structure","fields":[{"name":"prxUbKey","type":["null","string"],"doc":"Identifier
 of the UB 
(Proxi)","default":null},{"name":"prxUbDesc","type":["null","string"],"doc":"Description
 of the UB 
(Proxi)","default":null},{"name":"prxSubClassKey","type":["null","string"],"doc":"Identifier
 of the Sub Class 
(Proxi)","default":null},{"name":"prxSubClassDesc","type":["null","string"],"doc":"Description
 of the Sub Class 
(Proxi)","default":null},{"name":"prxClassKey","type":["null","string"],"doc":"Identifier
 of the Class 
(Proxi)","default":null},{"name":"prxClassDesc","type":["null","string"],"doc":"Description
 of the Class 
(Proxi)","default":null},{"name":"prxGrpClassKey","type":["null","string"],"doc":"Identifier
 of the Group Class 
(Proxi)","default":null},{"name":"prxGrpClassDesc","type":["null","string"],"doc":"Description
 of the Group Class 
(Proxi)","default":null},{"name":"prxHahDepartmentKey","type":["null","string"],"doc":"Identifier
 of the Department (Huit a 
Huit)","default":null},{"name":"prxHahDepartmentDesc","type":["null","string"],"doc":"Description
 of the Department (Huit a 
Huit)","default":null},{"name":"prxHahSectorKey","type":["null","string"],"doc":"Identifier
 of the Sector (Huit a 
Huit)","default":null},{"name":"prxHahSectorDesc","type":["null","string"],"doc":"Description
 of the Sector (Huit a 
Huit)","default":null},{"name":"prxShoDepartmentKey","type":["null","string"],"doc":"Identifier
 of the Department 
(Shopi)","default":null},{"name":"prxShoDepartmentDesc","type":["null","string"],"doc":"Description
 of the Department 
(Shopi)","default":null},{"name":"prxShoSectorKey","type":["null","string"],"doc":"Identifier
 of the Sector 
(Shopi)","default":null},{"name":"prxShoSectorDesc","type":["null","string"],"doc":"Description
 of the Sector (Shopi)","default":null}]}],"doc":"Structure 
Proxi","default":null},{"name":"structPrs","type":["null",{"type":"record","name":"ProductStructPrs","doc":"Product
 Proxi Structure 
(Shopi)","fields":[{"name":"prsUbKey","type":["null","string"],"doc":"Identifier
 of the UB 
(Shopi)","default":null},{"name":"prsUbDesc","type":["null","string"],"doc":"Description
 of the UB 
(Shopi)","default":null},{"name":"prsSubClassKey","type":["null","string"],"doc":"Identifier
 of the Sub Class 
(Shopi)","default":null},{"name":"prsSubClassDesc","type":["null","string"],"doc":"Description
 of the Sub Class 
(Shopi)","default":null},{"name":"prsClassKey","type":["null","string"],"doc":"Identifier
 of the Class 
(Shopi)","default":null},{"name":"prsClassDesc","type":["null","string"],"doc":"Description
 of the Class 
(Shopi)","default":null},{"name":"prsGrpClassKey","type":["null","string"],"doc":"Identifier
 of the Group Class 
(Shopi)","default":null},{"name":"prsGrpClassDesc","type":["null","string"],"doc":"Description
 of the Group Class 
(Shopi)","default":null},{"name":"prsDepartmentKey","type":["null","string"],"doc":"Identifier
 of the Department 
(Shopi)","default":null},{"name":"prsDepartmentDesc","type":["null","string"],"doc":"Description
 of the Department 
(Shopi)","default":null},{"name":"prsSectorKey","type":["null","string"],"doc":"Identifier
 of the Sector 
(Shopi)","default":null},{"name":"prsSectorDesc","type":["null","string"],"doc":"Description
 of the Sector (Shopi)","default":null}]}],"doc":"Product Proxi Structure 
(Shopi)","default":null},{"name":"structPrh","type":["null",{"type":"record","name":"ProductStructPrh","doc":"Product
 Proxi Structure 
(8a8)","fields":[{"name":"prhUbKey","type":["null","string"],"doc":"Identifier 
of the UB 
(8a8)","default":null},{"name":"prhUbDesc","type":["null","string"],"doc":"Description
 of the UB 
(8a8)","default":null},{"name":"prhSubClassKey","type":["null","string"],"doc":"Identifier
 of the Sub Class 
(8a8)","default":null},{"name":"prhSubClassDesc","type":["null","string"],"doc":"Description
 of the Sub Class 
(8a8)","default":null},{"name":"prhClassKey","type":["null","string"],"doc":"Identifier
 of the Class 
(8a8)","default":null},{"name":"prhClassDesc","type":["null","string"],"doc":"Description
 of the Class 
(8a8)","default":null},{"name":"prhGrpClassKey","type":["null","string"],"doc":"Identifier
 of the Group Class 
(8a8)","default":null},{"name":"prhGrpClassDesc","type":["null","string"],"doc":"Description
 of the Group Class 
(8a8)","default":null},{"name":"prhDepartmentKey","type":["null","string"],"doc":"Identifier
 of the Department 
(8a8)","default":null},{"name":"prhDepartmentDesc","type":["null","string"],"doc":"Description
 of the Department 
(8a8)","default":null},{"name":"prhSectorKey","type":["null","string"],"doc":"Identifier
 of the Sector 
(8a8)","default":null},{"name":"prhSectorDesc","type":["null","string"],"doc":"Description
 of the Sector (8a8)","default":null}]}],"doc":"Product Proxi Structure 
(8a8)","default":null},{"name":"structPmc","type":["null",{"type":"record","name":"ProductStructPmc","doc":"Product
 PromoCash 
Structure","fields":[{"name":"pmcUbKey","type":["null","string"],"doc":"Identifier
 of the UB 
(PromoCash)","default":null},{"name":"pmcUbDesc","type":["null","string"],"doc":"Description
 of the UB 
(PromoCash)","default":null},{"name":"pmcSubClassKey","type":["null","string"],"doc":"Identifier
 of the Sub Class 
(PromoCash)","default":null},{"name":"pmcSubClassDesc","type":["null","string"],"doc":"Description
 of the Sub Class 
(PromoCash)","default":null},{"name":"pmcClassKey","type":["null","string"],"doc":"Identifier
 of the Class 
(PromoCash)","default":null},{"name":"pmcClassDesc","type":["null","string"],"doc":"Description
 of the Class 
(PromoCash)","default":null},{"name":"pmcDepartmentKey","type":["null","string"],"doc":"Identifier
 of the Department 
(PromoCash)","default":null},{"name":"pmcDepartmentDesc","type":["null","string"],"doc":"Description
 of the Department 
(PromoCash)","default":null},{"name":"pmcSectorKey","type":["null","string"],"doc":"Identifier
 of the Sector 
(PromoCash)","default":null},{"name":"pmcSectorDesc","type":["null","string"],"doc":"Description
 of the Sector (PromoCash)","default":null}]}],"doc":"Structure 
PromoCash","default":null},{"name":"sectorKey","type":["null","string"],"doc":"Unique
 ID for Sector (Product 
Sector)","default":null},{"name":"sectorDesc","type":["null","string"],"doc":"Sector
 
description","default":null},{"name":"departmentKey","type":["null","string"],"doc":"Unique
 ID of the department (Product 
Department)","default":null},{"name":"departmentDesc","type":["null","string"],"doc":"Department
 
description","default":null},{"name":"grpClassKey","type":["null","string"],"doc":"Unique
 ID for Group Class (Product Group 
Family)","default":null},{"name":"grpClassDesc","type":["null","string"],"doc":"Group
 Class (Product Group Family) 
description","default":null},{"name":"classKey","type":["null","string"],"doc":"Unique
 ID for Class (Product 
Family)","default":null},{"name":"classDesc","type":["null","string"],"doc":"Class
 (Product Family) 
description","default":null},{"name":"subClassKey","type":["null","string"],"doc":"Unique
 ID of for product sub-class 
(Sub-Family)","default":null},{"name":"subClassDesc","type":["null","string"],"doc":"product
 sub-class (Sub-Family) 
description","default":null},{"name":"ubKey","type":["null","string"],"doc":"Unique
 ID for Unite Besoin (Product UB 
Family)","default":null},{"name":"ubDesc","type":["null","string"],"doc":"Description
 for level6 in French Unité de 
Besoin","default":null},{"name":"ubDescShort","type":["null","string"],"doc":"Short
 Description of the 
UB","default":null},{"name":"sizeKey","type":["null","string"],"doc":"Size 
code","default":null},{"name":"sizeDesc","type":["null","string"],"doc":"size 
description","default":null},{"name":"colorKey","type":["null","string"],"doc":"Color
 
code","default":null},{"name":"colorDesc","type":["null","string"],"doc":"Color 
description","default":null},{"name":"prdCapaType","type":["null","string"],"doc":"Capacity
 unit 
code","default":null},{"name":"prdCapaVolume","type":["null","double"],"doc":"Capacity","default":null},{"name":"prdCapaFactor","type":["null","double"],"doc":"Number
 of lot 
components","default":null},{"name":"prdUnitDesc","type":["null","string"],"doc":"Reference
 nature 
description","default":null},{"name":"prdCapaDesc","type":["null","string"],"doc":"Capacity
 unit 
description","default":null},{"name":"prdTechNature","type":["null","string"],"doc":"Technical
 nature of the 
product","default":null},{"name":"prdLotHomoFlag","type":["null","string"],"doc":"Homogeneous
 lot 
indicator","default":null},{"name":"prdLotQtyFree","type":["null","double"],"doc":"Free
 Quantity in the 
lot","default":null},{"name":"prdLotAmtFree","type":["null","common.lib.v1.Money"],"doc":"Free
 Amount in the 
lot","default":null},{"name":"prdLotQtyTotal","type":["null","double"],"doc":"Total
 Quantity in the 
lot","default":null},{"name":"prdQtyFree","type":["null","double"],"doc":"Free 
Quantity in the 
product","default":null},{"name":"prdQtyTotal","type":["null","double"],"doc":"Total
 Quantity in the 
product","default":null},{"name":"prdEan7Prix","type":["null","string"],"doc":"EAN7
 
prix","default":null},{"name":"prdEan7Poids","type":["null","string"],"doc":"EAN7
 
poids","default":null},{"name":"prdVarWeightFlag","type":["null","string"],"doc":"Variable
 measure 
indicator","default":null},{"name":"catSubManagerKey","type":["null","string"],"doc":"First
 level of Category Management 
Hierarchy","default":null},{"name":"bemSubClassKey","type":["null","string"],"doc":"A
 unique identifier of a product BEM 
sub-class","default":null},{"name":"prxUbKey","type":["null","string"],"doc":"Identifier
 of the UB 
(Proxi)","default":null},{"name":"pdrUbKey","type":["null","string"],"doc":"Code
 UB 
Prodirest","default":null},{"name":"pmcUbKey","type":["null","string"],"doc":"Identifier
 of the UB 
(PromoCash)","default":null},{"name":"brandOwnerCode","type":["null","string"],"doc":"External
 Code of the brand 
owner","default":null},{"name":"brandOwnerKey","type":["null","string"],"doc":"Identifier
 of the brand 
owner","default":null},{"name":"brandOwnerDesc","type":["null","string"],"doc":"Description
 of the brand 
owner","default":null},{"name":"brandKey","type":["null","string"],"doc":"Brand 
code","default":null},{"name":"brandDesc","type":["null","string"],"doc":"Brand 
description","default":null},{"name":"brandSubTypeKey","type":["null","string"],"doc":"Sub-qualification
 
key","default":null},{"name":"brandSubTypeDesc","type":["null","string"],"doc":"Sub-qualification
 
Description","default":null},{"name":"dispoKey","type":["null","string"],"doc":"Disponibility
 
code","default":null},{"name":"dispoDesc","type":["null","string"],"doc":"Disponibility
 
description","default":null},{"name":"negoOrigKey","type":["null","string"],"doc":"Identifier
 of the origin of the 
négociation","default":null},{"name":"negoOrigDesc","type":["null","string"],"doc":"Description
 of the origin of the 
négociation","default":null},{"name":"pceLevelType","type":["null","string"],"doc":"Price
 Level 
type","default":null},{"name":"prdCompoDesc","type":["null","string"],"doc":"Description
 ot the product 
composition","default":null},{"name":"modelBarcode","type":["null","string"],"doc":"Barcode
 of the model 
(textile)","default":null},{"name":"modelDesc","type":["null","string"],"doc":"Description
 of the model 
(textile)","default":null},{"name":"classDescShort","type":["null","string"],"doc":"Class
 (Product Family) short 
description","default":null},{"name":"mainSupplierPrcKey","type":["null","string"],"doc":"Identifier
 of the Main Supplier for the previous 
exercise","default":null},{"name":"purStopDate","type":["null","string"],"doc":"Date
 of STOP ITEM on 
purchase","default":null},{"name":"bcpBrdTypeKey","type":["null","string"],"doc":"identifier
 of the qualification in 
BCP","default":null},{"name":"bcpBrdTypeDesc","type":["null","string"],"doc":"Description
 of the qualification in 
BCP","default":null},{"name":"bcpBrdQualifKey","type":["null","string"],"doc":"identifier
 of the brand qualification in 
BCP","default":null},{"name":"bcpBrdQualifDesc","type":["null","string"],"doc":"Description
 of the brand qualification in 
BCP","default":null},{"name":"bcpBrdSubQualifKey","type":["null","string"],"doc":"Identifier
 of the brand sub-qualification in 
BCP","default":null},{"name":"bcpBrdSubQualifDesc","type":["null","string"],"doc":"Description
 of the brand sub-qualification in 
BCP","default":null},{"name":"bcpHypAppelPrixCode","type":["null","string"],"doc":"National
 POS Price short code for 
Hypermarket","default":null},{"name":"bcpSupAppelPrixCode","type":["null","string"],"doc":"National
 POS Price short code for 
Supermarket","default":null},{"name":"supUgKey","type":["null","string"],"doc":"Caroline
 Super Stock Keeping Unit (UG) 
Key","default":null},{"name":"supUgDesc","type":["null","string"],"doc":"Caroline
 Super Stock Keeping Unit (UG) 
Description","default":null},{"name":"prdRefNature","type":["null","string"],"doc":"Product
 reference 
nature","default":null},{"name":"prdModKey","type":["null","string"],"doc":"Code
 of manufacturing 
mode","default":null},{"name":"prdModDesc","type":["null","string"],"doc":"Description
 of manufacturing 
mode","default":null},{"name":"productLineDesc","type":["null","string"],"doc":"Product
 Line 
Description","default":null},{"name":"brandMasterKey","type":["null","string"],"doc":"Identifier
 of the Master 
Brand","default":null},{"name":"brandMasterDesc","type":["null","string"],"doc":"Description
 of the Master 
Brand","default":null},{"name":"prdOrigOpKey","type":["null","string"],"doc":"Operational
 Identifier of the origin of the 
product","default":null},{"name":"prdOrigOpDesc","type":["null","string"],"doc":"Operational
 Description of the origin of the 
product","default":null},{"name":"mbcItemKey","type":["null","string"],"doc":"MBC
 Atica Hyper Stock Keeping Unit (AG) 
Key","default":null},{"name":"hypTypoKey","type":["null","string"],"doc":"Product
 Typology for 
Hypermarkets","default":null},{"name":"supTypoKey","type":["null","string"],"doc":"Product
 Typology for 
Supermarkets","default":null},{"name":"prxTypoKey","type":["null","string"],"doc":"Product
 Typology for Proximity 
Stores","default":null},{"name":"cacTypoKey","type":["null","string"],"doc":"Product
 Typology for Cash & Carry 
Stores","default":null},{"name":"prdPackFlag","type":["null","string"],"doc":"Divisible
 product pack 
flag","default":null},{"name":"trendCode","type":["null","string"],"doc":"Code 
of textile 
classification","default":null},{"name":"trendDesc","type":["null","string"],"doc":"Description
 of textile 
classification","default":null},{"name":"prdSeasonCode","type":["null","string"],"doc":"Code
 of the 
Season","default":null},{"name":"mbcSubClassKey","type":["null","string"],"doc":"MBC
 sub 
family","default":null},{"name":"mbcSizeCode","type":["null","string"],"doc":"Size
 of the 
article","default":null},{"name":"mbcColorCode","type":["null","string"],"doc":"Color
 of the 
article","default":null},{"name":"ubcKey","type":["null","string"],"doc":"Identifier
 of the Consumer Unit of Need (UBC 
OptiCAT)","default":null},{"name":"ubcDesc","type":["null","string"],"doc":"Description
 of the Consumer Unit of Need (UBC 
OptiCAT)","default":null},{"name":"hypUgKey","type":["null","string"],"doc":"Caroline
 Hyper Stock Keeping Unit (UG) 
Key","default":null},{"name":"hypUgDesc","type":["null","string"],"doc":"Caroline
 Hyper Stock Keeping Unit (UG) 
Description","default":null},{"name":"prxUgKey","type":["null","string"],"doc":"Proxy
 Stock Keeping Unit (UG) 
Key","default":null},{"name":"prxUgDesc","type":["null","string"],"doc":"Proxy 
Stock Keeping Unit (UG) 
Description","default":null},{"name":"pmcUgKey","type":["null","string"],"doc":"PromoCash
 Stock Keeping Unit (UG) 
Key","default":null},{"name":"pmcUgDesc","type":["null","string"],"doc":"PromoCash
 Stock Keeping Unit (UG) 
Description","default":null},{"name":"dctHypDirectFlag","type":["null","string"],"doc":"Indicates
 that permanent product should use Direct Flow in 
HyperMarket","default":null},{"name":"dctSupDirectFlag","type":["null","string"],"doc":"Indicates
 that permanent product should use Direct Flow in 
SuperMarket","default":null},{"name":"crpAttributes","type":["null",{"type":"array","items":{"type":"record","name":"CrpAttributes","doc":"CRP
 Product characteristics 
Attributes","fields":[{"name":"crpKey","type":["null","string"],"doc":"CRP 
Key","default":null},{"name":"crpCode","type":["null","string"],"doc":"CRP 
external 
code","default":null},{"name":"crpValueBegDate","type":["null","string"],"doc":"CRP
 value begin date 
YYYYMMDD","default":null},{"name":"crpValueEndDate","type":["null","string"],"doc":"CRP
 value finish date 
YYYYMMDD","default":null},{"name":"catCrpKey","type":["null","string"],"doc":"CRP
 category 
key","default":null},{"name":"catCrpDesc","type":["null","string"],"doc":"CRP 
category 
descrpition","default":null},{"name":"subCatCrpKey","type":["null","string"],"doc":"CRP
 subcategory 
key","default":null},{"name":"subCatCrpDesc","type":["null","string"],"doc":"CRP
 subcategory 
descrpition","default":null},{"name":"crpNatDesc","type":["null","string"],"doc":"CRP
 national 
description","default":null},{"name":"crpEngDesc","type":["null","string"],"doc":"CRP
 english 
description","default":null},{"name":"crpAddDesc","type":["null",{"type":"array","items":{"type":"record","name":"CrpAddDesc","doc":"CRP
 Product characteristics additionnal 
description","fields":[{"name":"crpAddNatDesc","type":["null","string"],"doc":"CRP
 national additional 
description","default":null},{"name":"crpAddEngDesc","type":["null","string"],"doc":"CRP
 english additional description","default":null}]}}],"doc":"Additional 
descriptions","default":null},{"name":"crpDesc","type":["null","string"],"doc":"CRP
 
description","default":null},{"name":"crpValueFormat","type":["null","string"],"doc":"CRP
 Value 
format","default":null},{"name":"crpValueLength","type":["null","int"],"doc":"CRP
 Value 
length","default":null},{"name":"crpUnitNatSymbol","type":["null","string"],"doc":"Mesurement
 unit key national 
symbol","default":null},{"name":"crpUnitEngSymbol","type":["null","string"],"doc":"Mesurement
 unit key english 
symbol","default":null},{"name":"crpUnitNatDesc","type":["null","string"],"doc":"Mesurement
 unit key national 
description","default":null},{"name":"crpUnitEngDesc","type":["null","string"],"doc":"Mesurement
 unit key english 
description","default":null},{"name":"crpUnitNatValue","type":["null","string"],"doc":"CRP
 national 
value","default":null},{"name":"crpUnitEngValue","type":["null","string"],"doc":"CRP
 english 
value","default":null},{"name":"crpLink","type":["null","string"],"doc":"CRP 
link between 
values","default":null},{"name":"crpSourceKey","type":["null","string"],"doc":"CRP
 code from 
source","default":null},{"name":"crpSourceDesc","type":["null","string"],"doc":"CRP
 source 
description","default":null},{"name":"extDateTime","type":["null","string"],"doc":"extraction
 timestamp ISO8601 deprecated yyyy-MM-dd''T''HH:mm:ss.SSSZZ use 
yyyyMMdd''T''HHmmss.SSSZ","default":null}]}}],"doc":"CRP Product 
characteristics 
Attributes","default":null},{"name":"hypSalPceUnitType","type":["null","string"],"doc":"Hyper
 Sales Price level type (UVC, 
UCT)","default":null},{"name":"supSalPceUnitType","type":["null","string"],"doc":"Super
 Sales Price level type (UVC, 
UCT)","default":null},{"name":"prxSalPceUnitType","type":["null","string"],"doc":"Proxi
 Sales Price level type (UVC, 
UCT)","default":null},{"name":"pmcSalPceUnitType","type":["null","string"],"doc":"Cash
 and Carry Sales Price level type (UVC, 
UCT)","default":null},{"name":"hypPluCode","type":["null","string"],"doc":"Hyper
 PLU 
Code","default":null},{"name":"supPluCode","type":["null","string"],"doc":"Super
 PLU 
Code","default":null},{"name":"prxPluCode","type":["null","string"],"doc":"Proxi
 PLU 
Code","default":null},{"name":"pmcPluCode","type":["null","string"],"doc":"Cash 
and Carry PLU 
Code","default":null},{"name":"prdSupplierCode","type":["null","string"],"doc":"Reference
 of the product by the 
supplier","default":null},{"name":"prdMarketingDesc","type":["null","string"],"doc":"Marketing
 description of the 
product","default":null},{"name":"prdPackaging","type":["null","string"],"doc":"Packaging
 of the 
products","default":null},{"name":"prdMarketingSaleUnit","type":["null","string"],"doc":"Type
 of sale 
Unit","default":null},{"name":"prdVariableTypePrep","type":["null","string"],"doc":"Type
 of preparation 
variable","default":null},{"name":"prdPublishableFlag","type":["null","string"],"doc":"Publishable
 
flag","default":null},{"name":"specialTaxType","type":["null","string"],"doc":"Product
 Special tax 
Type","default":null},{"name":"prdDutyType","type":["null","string"],"doc":"Product
 Duty tax 
Type","default":null},{"name":"vatCode","type":["null","string"],"doc":"Identier
 of 
VAT","default":null},{"name":"prdAlcoholProof","type":["null","string"],"doc":"Product
 Alcohol 
Proof","default":null},{"name":"prdShortDesc","type":["null","string"],"doc":"Product
 short 
description","default":null},{"name":"productServiceType","type":["null","string"],"doc":"Type
 of the 
Service","default":null},{"name":"productServiceDesc","type":["null","string"],"doc":"Description
 of the 
service","default":null},{"name":"productPurchaseSaleType","type":["null","string"],"doc":"Type
 of the product 
(Purchase/Sale)","default":null},{"name":"prdDryNetWeight","type":["null","double"],"doc":"Dry
 net weight of the sales 
unit","default":null},{"name":"prdPackWeight","type":["null","double"],"doc":"Weight
 of the packaged saled 
product","default":null},{"name":"prdPackHeight","type":["null","double"],"doc":"Height
 of the packaged saled 
product","default":null},{"name":"prdPackWidth","type":["null","double"],"doc":"Width
 of the packaged saled 
product","default":null},{"name":"prdPackLength","type":["null","double"],"doc":"Length
 of the packaged saled 
product","default":null},{"name":"srcTimestamp","type":["null","string"],"doc":"Source
 
Timestamp","default":null},{"name":"trtTimestamp","type":["null","string"],"doc":"Processing
 Timestamp","default":null}]}

{code}

  was:
Add an expression encoder for objects defined by properties (ie. I call them 
Beans). A property of an object is defined by a _setter_ and a _getter_ 
functions where the _getter_ return type is equal to the _setter_ unique 
parameter type and the _getter_ and _setter_ functions have the same name or 
the _getter_ name is prefixed by "get" and the _setter_ name is prefixed by 
"set"

 

An example of a Bean:
{code:java}
class Bar {
 ...   
  def age():Int = {...}

  def age(v:Int):Unit {...}
  ...
}

class Foo extends Bar { 
...  
   def setName(n:String) {...}
  def getName():String = {...}
...
}
{code}
```

 The class _Foo in the example above_ has 2 properties _age_ and _Name._

 

Also, in this new feature, we added support for _java.util.List_, 
_java.util.Map_ and java _Enums_ 

Avro objects are beans and thus we can create an expression encoder for avro 
objects with the current addition. All avro types, including fixed types, and 
excluding complex union types, are suppported by this addition.

 

Currently complex avro unions are not supported because a complex union is 
declared as Object.

 


> expression encoder for avro like objects
> ----------------------------------------
>
>                 Key: SPARK-27388
>                 URL: https://issues.apache.org/jira/browse/SPARK-27388
>             Project: Spark
>          Issue Type: New Feature
>          Components: SQL
>    Affects Versions: 2.4.1
>            Reporter: Taoufik DACHRAOUI
>            Priority: Major
>
> *What changes were proposed in this pull request?*
> This PR adds expression encoders for beans, java.util.List, java.util.Map and 
> java enum.
> The Beans are objects defined by properties; A property is defined by a 
> setter and a getter functions where the getter return type is equal to the 
> setter unique parameter type and the getter and setter functions have the 
> same name; if the getter name is prefixed by "get" then the setter name must 
> be prefixed by "set"; see tests for bean examples.
> Avro objects are beans and thus we can create an expression encoder for avro 
> objects as follows:
> {code:java}
> implicit val exprEncoder = ExpressionEncoder[Foo]()
> {code}
> All avro types, including fixed types, and excluding complex union types, are 
> suppported by this addition.
> The avro fixed types are beans with exactly one property: bytes.
> Currently complex avro unions are not supported because a complex union is 
> declared as Object and there cannot be an expression encoder for Object type 
> (need to use a custom serializer like kryo for example)
> *How was this patch tested?*
> currently only 1 encodeDecodeTest was added to ExpressionEncoderSuite; the 
> test uses an avro object with map, array and fixed fields, as in the test 3 
> (below).
> I used the modified spark-sql package in a local project to test it
> the tests are as follows (where Barcode is a large Avro object):
> 1. test with simple beans
> {code:java}
> class Bar {
>   private var bar$: String = _
>   def bar(value: String): Unit = {
>     bar$ = value
>   }
>   def bar(): String = bar$
>   override def toString() = { s"Bar($bar)" }
> }
> class Foo extends Bar {
>   var a: Int = _
>   var b: Bar = _
>   def getA() = a
>   def setA(x: Int) {
>     a = x
>   }
>   def getB(): Bar = b
>   def setB(x: Bar) {
>     b = x
>   }
>   override def toString() = { s"Foo($a,$b, ${bar()})" }
> }
> {code}
> {code:java}
>     implicit val encoderFoo = ExpressionEncoder[Foo]
>     val bar = new Bar
>     bar.bar("ok")
>     val a = new Foo
>     a.setA(55)
>     a.setB(bar)
>     a.bar("BAR")
>     val ds = List(a).toDS()
>     println(ds.collect().toList)
>     val df = List(a).toDF()
>     val r = df.collect().foreach(println)
>     println(df.schema)
> Result => 
> List(Foo(55,Bar(ok), BAR))
> [[ok],55,BAR]
> StructType(StructField(B,StructType(StructField(bar,StringType,true)),true), 
> StructField(A,IntegerType,false), StructField(bar,StringType,true))
> {code}
> 2. test with a large Avro schema (Barcode) with nested avro objects, java 
> enums and arrays:
> {code:java}
>     implicit val barcodeEncoder = ExpressionEncoder[Barcode]()
>     val ds: Dataset[Barcode] = 0.until(10000).map(i => {
>       val crpAddDesc = new java.util.ArrayList[CrpAddDesc]()
>       crpAddDesc.add(CrpAddDesc.newBuilder()
>         .setCrpAddEngDesc(s"Crp description1 $i")
>         .build())
>       crpAddDesc.add(CrpAddDesc.newBuilder()
>         .setCrpAddEngDesc(s"Crp description2 $i")
>         .build())
>       val crpAttrs = new java.util.ArrayList[CrpAttributes]()
>       crpAttrs.add(CrpAttributes.newBuilder()
>         .setCrpCode(s"crp attr1 $i")
>         .setCrpAddDesc(crpAddDesc)
>         .build())
>       crpAttrs.add(CrpAttributes.newBuilder()
>         .setCrpCode(s"crp attr2 $i")
>         .build())
>       val barcode = Barcode.newBuilder()
>         .setBarcode(s"Bar$i")
>         .setPrdTaxVal(Money.newBuilder()
>           .setUnscaledAmount(i.toLong)
>           .setScale(0)
>           .setCurrency(Currency.EUR)
>           .setCurrencyAlphaCode("EUR")
>           .build())
>         .setCrpAttributes(crpAttrs)
>         .build()
>       barcode
>     })
>       .toDS()
>     val x = ds.map(a => {
>       (
>         a.getBarcode,
>         a.getPrdTaxVal.getCurrency,
>         a.getCrpAttributes.get(0).getCrpCode,
>         a.getCrpAttributes.get(1).getCrpCode)
>     })
>    
>     println(x.collect().toList.drop(100).head)
> result => (Bar100,EUR,crp attr1 100,crp attr2 100)
> {code}
> 3. test with Avro schema having map, array and fixed types
> {code:java}
>     implicit val logEncoder = ExpressionEncoder[Log]()
>     val ds: Dataset[Log] = List(Log.newBuilder()
>       .setIps(List("127.0.0.1", "127.0.0.0").asJava)
>       .setAdditional(Map(
>         "foo" -> new java.lang.Integer(1),
>         "bar" -> new java.lang.Integer(2)).asJava)
>       .setTimestamp("12345678")
>       .setMessage("test map")
>       .setMagic(new Magic("magic".getBytes))
>       .build())
>       .toDS()
>     println(ds.collect().toList)
> result: List({"ips": ["127.0.0.1", "127.0.0.0"], "timestamp": "12345678", 
> "message": "test map", "magic": [109, 97, 103, 105, 99], "additional": 
> {"foo": 1, "bar": 2}})
> {code}
> Log Avro schema:
> {code:java}
> {"namespace": "example.avro", "type": "record", "name": "Log",
>          "fields": [ {"name": "ips", "type": {"type": "array", "items": 
> "string"}},
>              {"name": "timestamp", "type": "string"},
>              {"name": "message", "type": "string"},
>              {"name": "magic", "type": {"type": "fixed", "name": "Magic", 
> "size": 4}},
>              {"name": "additional", "type": {"type": "map", "values": "int"}} 
> ] }
> {code}
> Barcode Avro schema:
> {code:java}
> {"type":"record","name":"Barcode","namespace":"referential.product.v2","doc":"Barcode
>  Pivot","fields":[{"name":"barcode","type":["null","string"],"doc":"Barcode 
> of the 
> product","default":null},{"name":"transBarcode","type":["null","string"],"doc":"Origin
>  
> EAN13","default":null},{"name":"barcodeType","type":["null","string"],"doc":"Barcode
>  
> type","default":null},{"name":"itemKey","type":["null","string"],"doc":"Internal
>  Code of the 
> Product","default":null},{"name":"itemDesc","type":["null","string"],"doc":"Description
>  of the 
> product","default":null},{"name":"itemDesc18","type":["null","string"],"doc":"Description
>  of the product (18c) on the 
> ticket","default":null},{"name":"mainItemKey","type":["null","string"],"doc":"Item
>  code of the parent product 
> (ifexists)","default":null},{"name":"mainBarcode","type":["null","string"],"doc":"Main
>  Barcode of the 
> product","default":null},{"name":"mainSupplierKey","type":["null","string"],"doc":"Identifier
>  of the Main 
> Supplier","default":null},{"name":"supplierKey","type":["null","string"],"doc":"Identifier
>  of the 
> supplier","default":null},{"name":"itemType","type":["null","string"],"doc":"Type
>  of item : [D] Direct, [L] Logistique, [M] Mix , [XD] Cross-docking, [PCK] 
> Picking, [FT] Flow Through, [VFT] Virtual Flow Through [HD] Home 
> Delivery","default":null},{"name":"brandTypeKey","type":["null","string"],"doc":"ID
>  for the BrandType 
> (MD,MN,PP)(seevalues)","default":null},{"name":"brandTypeDesc","type":["null","string"],"doc":"Description
>  for the Brand 
> Type","default":null},{"name":"createDate","type":["null","string"],"doc":"Creation
>  
> date","default":null},{"name":"updateDate","type":["null","string"],"doc":"Update
>  
> date.(YYYYMMDD)","default":null},{"name":"deleteDate","type":["null","string"],"doc":"Delete
>  
> Date","default":null},{"name":"nonActiveDate","type":["null","string"],"doc":"Non
>  active 
> date(YYYYMMDD)","default":null},{"name":"prdStopFlag","type":["null","string"],"doc":"Flag
>  STOP PRODUC T(for the sales and the 
> purchase)","default":null},{"name":"salStopFlag","type":["null","string"],"doc":"Flag
>  STOP ITEM on 
> sales","default":null},{"name":"purStopFlag","type":["null","string"],"doc":"Flag
>  STOP ITEM on 
> purchase","default":null},{"name":"prdVatPct","type":["null","double"],"doc":"VAT
>  
> percentage","default":null},{"name":"prdTaxVal","type":["null",{"type":"record","name":"Money","namespace":"common.lib.v1","fields":[{"name":"unscaledAmount","type":"long","default":0},{"name":"scale","type":"int","default":0},{"name":"currency","type":{"type":"enum","name":"Currency","symbols":["EUR","USD","BRL"]},"default":"EUR"},{"name":"currencyAlphaCode","type":["null","string"],"default":null}]}],"doc":"Other
>  taxes 
> amount","default":null},{"name":"prdVigVal","type":["null","common.lib.v1.Money"],"doc":"Vignette
>  
> amount","default":null},{"name":"prdDutyVal","type":["null","common.lib.v1.Money"],"doc":"Duty
>  
> amount","default":null},{"name":"prdUnitType","type":["null","string"],"doc":"Reference
>  nature 
> code","default":null},{"name":"frRacCode","type":["null","string"],"doc":"RAC 
> code of the product 
> (ANABEL2)","default":null},{"name":"npceBaseRist","type":["null","common.lib.v1.Money"],"doc":"Net
>  price without tax for margin 
> computation","default":null},{"name":"frTheoSrpPceOrig","type":["null","common.lib.v1.Money"],"doc":"Theoretical
>  Break Even Price (SRP) without 
> tax","default":null},{"name":"frTheoSrpPceMod","type":["null","common.lib.v1.Money"],"doc":"Theoretical
>  Break Even Price (SRP) updated by 
> RSRP+RFA","default":null},{"name":"structHyp","type":["null",{"type":"record","name":"ProductStructHyp","doc":"Product
>  HyperMarket 
> Structure","fields":[{"name":"hypUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (HyperMarket)","default":null},{"name":"hypUbDesc","type":["null","string"],"doc":"Description
>  of the UB 
> (HyperMarket)","default":null},{"name":"hypSubClassKey","type":["null","string"],"doc":"Identifier
>  of the Sub Class 
> (HyperMarket)","default":null},{"name":"hypSubClassDesc","type":["null","string"],"doc":"Description
>  of the Sub Class 
> (HyperMarket)","default":null},{"name":"hypClassKey","type":["null","string"],"doc":"Identifier
>  of the Class 
> (HyperMarket)","default":null},{"name":"hypClassDesc","type":["null","string"],"doc":"Description
>  of the Class 
> (HyperMarket)","default":null},{"name":"hypGrpClassKey","type":["null","string"],"doc":"Identifier
>  of the Group Class 
> (HyperMarket)","default":null},{"name":"hypGrpClassDesc","type":["null","string"],"doc":"Description
>  of the Group Class 
> (HyperMarket)","default":null},{"name":"hypDepartmentKey","type":["null","string"],"doc":"Identifier
>  of the Department 
> (HyperMarket)","default":null},{"name":"hypDepartmentDesc","type":["null","string"],"doc":"Description
>  of the Department 
> (HyperMarket)","default":null},{"name":"hypSectorKey","type":["null","string"],"doc":"Identifier
>  of the Sector 
> (HyperMarket)","default":null},{"name":"hypSectorDesc","type":["null","string"],"doc":"Description
>  of the Sector (HyperMarket)","default":null}]}],"doc":"Structure 
> Hyper","default":null},{"name":"structSup","type":["null",{"type":"record","name":"ProductStructSup","doc":"Product
>  SuperMarket 
> Structure","fields":[{"name":"supUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (SuperMarket)","default":null},{"name":"supUbDesc","type":["null","string"],"doc":"Description
>  of the UB 
> (SuperMarket)","default":null},{"name":"supSubClassKey","type":["null","string"],"doc":"Identifier
>  of the Sub Class 
> (SuperMarket)","default":null},{"name":"supSubClassDesc","type":["null","string"],"doc":"Description
>  of the Sub Class 
> (SuperMarket)","default":null},{"name":"supClassKey","type":["null","string"],"doc":"Identifier
>  of the Class 
> (SuperMarket)","default":null},{"name":"supClassDesc","type":["null","string"],"doc":"Description
>  of the Class 
> (SuperMarket)","default":null},{"name":"supGrpClassKey","type":["null","string"],"doc":"Identifier
>  of the Group Class 
> (SuperMarket)","default":null},{"name":"supGrpClassDesc","type":["null","string"],"doc":"Description
>  of the Group Class 
> (SuperMarket)","default":null},{"name":"supDepartmentKey","type":["null","string"],"doc":"Identifier
>  of the Department 
> (SuperMarket)","default":null},{"name":"supDepartmentDesc","type":["null","string"],"doc":"Description
>  of the Department 
> (SuperMarket)","default":null},{"name":"supSectorKey","type":["null","string"],"doc":"Identifier
>  of the Sector 
> (SuperMarket)","default":null},{"name":"supSectorDesc","type":["null","string"],"doc":"Description
>  of the Sector (SuperMarket)","default":null}]}],"doc":"Structure 
> Super","default":null},{"name":"structPrx","type":["null",{"type":"record","name":"ProductStructPrx","doc":"Product
>  Proxi 
> Structure","fields":[{"name":"prxUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (Proxi)","default":null},{"name":"prxUbDesc","type":["null","string"],"doc":"Description
>  of the UB 
> (Proxi)","default":null},{"name":"prxSubClassKey","type":["null","string"],"doc":"Identifier
>  of the Sub Class 
> (Proxi)","default":null},{"name":"prxSubClassDesc","type":["null","string"],"doc":"Description
>  of the Sub Class 
> (Proxi)","default":null},{"name":"prxClassKey","type":["null","string"],"doc":"Identifier
>  of the Class 
> (Proxi)","default":null},{"name":"prxClassDesc","type":["null","string"],"doc":"Description
>  of the Class 
> (Proxi)","default":null},{"name":"prxGrpClassKey","type":["null","string"],"doc":"Identifier
>  of the Group Class 
> (Proxi)","default":null},{"name":"prxGrpClassDesc","type":["null","string"],"doc":"Description
>  of the Group Class 
> (Proxi)","default":null},{"name":"prxHahDepartmentKey","type":["null","string"],"doc":"Identifier
>  of the Department (Huit a 
> Huit)","default":null},{"name":"prxHahDepartmentDesc","type":["null","string"],"doc":"Description
>  of the Department (Huit a 
> Huit)","default":null},{"name":"prxHahSectorKey","type":["null","string"],"doc":"Identifier
>  of the Sector (Huit a 
> Huit)","default":null},{"name":"prxHahSectorDesc","type":["null","string"],"doc":"Description
>  of the Sector (Huit a 
> Huit)","default":null},{"name":"prxShoDepartmentKey","type":["null","string"],"doc":"Identifier
>  of the Department 
> (Shopi)","default":null},{"name":"prxShoDepartmentDesc","type":["null","string"],"doc":"Description
>  of the Department 
> (Shopi)","default":null},{"name":"prxShoSectorKey","type":["null","string"],"doc":"Identifier
>  of the Sector 
> (Shopi)","default":null},{"name":"prxShoSectorDesc","type":["null","string"],"doc":"Description
>  of the Sector (Shopi)","default":null}]}],"doc":"Structure 
> Proxi","default":null},{"name":"structPrs","type":["null",{"type":"record","name":"ProductStructPrs","doc":"Product
>  Proxi Structure 
> (Shopi)","fields":[{"name":"prsUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (Shopi)","default":null},{"name":"prsUbDesc","type":["null","string"],"doc":"Description
>  of the UB 
> (Shopi)","default":null},{"name":"prsSubClassKey","type":["null","string"],"doc":"Identifier
>  of the Sub Class 
> (Shopi)","default":null},{"name":"prsSubClassDesc","type":["null","string"],"doc":"Description
>  of the Sub Class 
> (Shopi)","default":null},{"name":"prsClassKey","type":["null","string"],"doc":"Identifier
>  of the Class 
> (Shopi)","default":null},{"name":"prsClassDesc","type":["null","string"],"doc":"Description
>  of the Class 
> (Shopi)","default":null},{"name":"prsGrpClassKey","type":["null","string"],"doc":"Identifier
>  of the Group Class 
> (Shopi)","default":null},{"name":"prsGrpClassDesc","type":["null","string"],"doc":"Description
>  of the Group Class 
> (Shopi)","default":null},{"name":"prsDepartmentKey","type":["null","string"],"doc":"Identifier
>  of the Department 
> (Shopi)","default":null},{"name":"prsDepartmentDesc","type":["null","string"],"doc":"Description
>  of the Department 
> (Shopi)","default":null},{"name":"prsSectorKey","type":["null","string"],"doc":"Identifier
>  of the Sector 
> (Shopi)","default":null},{"name":"prsSectorDesc","type":["null","string"],"doc":"Description
>  of the Sector (Shopi)","default":null}]}],"doc":"Product Proxi Structure 
> (Shopi)","default":null},{"name":"structPrh","type":["null",{"type":"record","name":"ProductStructPrh","doc":"Product
>  Proxi Structure 
> (8a8)","fields":[{"name":"prhUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (8a8)","default":null},{"name":"prhUbDesc","type":["null","string"],"doc":"Description
>  of the UB 
> (8a8)","default":null},{"name":"prhSubClassKey","type":["null","string"],"doc":"Identifier
>  of the Sub Class 
> (8a8)","default":null},{"name":"prhSubClassDesc","type":["null","string"],"doc":"Description
>  of the Sub Class 
> (8a8)","default":null},{"name":"prhClassKey","type":["null","string"],"doc":"Identifier
>  of the Class 
> (8a8)","default":null},{"name":"prhClassDesc","type":["null","string"],"doc":"Description
>  of the Class 
> (8a8)","default":null},{"name":"prhGrpClassKey","type":["null","string"],"doc":"Identifier
>  of the Group Class 
> (8a8)","default":null},{"name":"prhGrpClassDesc","type":["null","string"],"doc":"Description
>  of the Group Class 
> (8a8)","default":null},{"name":"prhDepartmentKey","type":["null","string"],"doc":"Identifier
>  of the Department 
> (8a8)","default":null},{"name":"prhDepartmentDesc","type":["null","string"],"doc":"Description
>  of the Department 
> (8a8)","default":null},{"name":"prhSectorKey","type":["null","string"],"doc":"Identifier
>  of the Sector 
> (8a8)","default":null},{"name":"prhSectorDesc","type":["null","string"],"doc":"Description
>  of the Sector (8a8)","default":null}]}],"doc":"Product Proxi Structure 
> (8a8)","default":null},{"name":"structPmc","type":["null",{"type":"record","name":"ProductStructPmc","doc":"Product
>  PromoCash 
> Structure","fields":[{"name":"pmcUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (PromoCash)","default":null},{"name":"pmcUbDesc","type":["null","string"],"doc":"Description
>  of the UB 
> (PromoCash)","default":null},{"name":"pmcSubClassKey","type":["null","string"],"doc":"Identifier
>  of the Sub Class 
> (PromoCash)","default":null},{"name":"pmcSubClassDesc","type":["null","string"],"doc":"Description
>  of the Sub Class 
> (PromoCash)","default":null},{"name":"pmcClassKey","type":["null","string"],"doc":"Identifier
>  of the Class 
> (PromoCash)","default":null},{"name":"pmcClassDesc","type":["null","string"],"doc":"Description
>  of the Class 
> (PromoCash)","default":null},{"name":"pmcDepartmentKey","type":["null","string"],"doc":"Identifier
>  of the Department 
> (PromoCash)","default":null},{"name":"pmcDepartmentDesc","type":["null","string"],"doc":"Description
>  of the Department 
> (PromoCash)","default":null},{"name":"pmcSectorKey","type":["null","string"],"doc":"Identifier
>  of the Sector 
> (PromoCash)","default":null},{"name":"pmcSectorDesc","type":["null","string"],"doc":"Description
>  of the Sector (PromoCash)","default":null}]}],"doc":"Structure 
> PromoCash","default":null},{"name":"sectorKey","type":["null","string"],"doc":"Unique
>  ID for Sector (Product 
> Sector)","default":null},{"name":"sectorDesc","type":["null","string"],"doc":"Sector
>  
> description","default":null},{"name":"departmentKey","type":["null","string"],"doc":"Unique
>  ID of the department (Product 
> Department)","default":null},{"name":"departmentDesc","type":["null","string"],"doc":"Department
>  
> description","default":null},{"name":"grpClassKey","type":["null","string"],"doc":"Unique
>  ID for Group Class (Product Group 
> Family)","default":null},{"name":"grpClassDesc","type":["null","string"],"doc":"Group
>  Class (Product Group Family) 
> description","default":null},{"name":"classKey","type":["null","string"],"doc":"Unique
>  ID for Class (Product 
> Family)","default":null},{"name":"classDesc","type":["null","string"],"doc":"Class
>  (Product Family) 
> description","default":null},{"name":"subClassKey","type":["null","string"],"doc":"Unique
>  ID of for product sub-class 
> (Sub-Family)","default":null},{"name":"subClassDesc","type":["null","string"],"doc":"product
>  sub-class (Sub-Family) 
> description","default":null},{"name":"ubKey","type":["null","string"],"doc":"Unique
>  ID for Unite Besoin (Product UB 
> Family)","default":null},{"name":"ubDesc","type":["null","string"],"doc":"Description
>  for level6 in French Unité de 
> Besoin","default":null},{"name":"ubDescShort","type":["null","string"],"doc":"Short
>  Description of the 
> UB","default":null},{"name":"sizeKey","type":["null","string"],"doc":"Size 
> code","default":null},{"name":"sizeDesc","type":["null","string"],"doc":"size 
> description","default":null},{"name":"colorKey","type":["null","string"],"doc":"Color
>  
> code","default":null},{"name":"colorDesc","type":["null","string"],"doc":"Color
>  
> description","default":null},{"name":"prdCapaType","type":["null","string"],"doc":"Capacity
>  unit 
> code","default":null},{"name":"prdCapaVolume","type":["null","double"],"doc":"Capacity","default":null},{"name":"prdCapaFactor","type":["null","double"],"doc":"Number
>  of lot 
> components","default":null},{"name":"prdUnitDesc","type":["null","string"],"doc":"Reference
>  nature 
> description","default":null},{"name":"prdCapaDesc","type":["null","string"],"doc":"Capacity
>  unit 
> description","default":null},{"name":"prdTechNature","type":["null","string"],"doc":"Technical
>  nature of the 
> product","default":null},{"name":"prdLotHomoFlag","type":["null","string"],"doc":"Homogeneous
>  lot 
> indicator","default":null},{"name":"prdLotQtyFree","type":["null","double"],"doc":"Free
>  Quantity in the 
> lot","default":null},{"name":"prdLotAmtFree","type":["null","common.lib.v1.Money"],"doc":"Free
>  Amount in the 
> lot","default":null},{"name":"prdLotQtyTotal","type":["null","double"],"doc":"Total
>  Quantity in the 
> lot","default":null},{"name":"prdQtyFree","type":["null","double"],"doc":"Free
>  Quantity in the 
> product","default":null},{"name":"prdQtyTotal","type":["null","double"],"doc":"Total
>  Quantity in the 
> product","default":null},{"name":"prdEan7Prix","type":["null","string"],"doc":"EAN7
>  
> prix","default":null},{"name":"prdEan7Poids","type":["null","string"],"doc":"EAN7
>  
> poids","default":null},{"name":"prdVarWeightFlag","type":["null","string"],"doc":"Variable
>  measure 
> indicator","default":null},{"name":"catSubManagerKey","type":["null","string"],"doc":"First
>  level of Category Management 
> Hierarchy","default":null},{"name":"bemSubClassKey","type":["null","string"],"doc":"A
>  unique identifier of a product BEM 
> sub-class","default":null},{"name":"prxUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (Proxi)","default":null},{"name":"pdrUbKey","type":["null","string"],"doc":"Code
>  UB 
> Prodirest","default":null},{"name":"pmcUbKey","type":["null","string"],"doc":"Identifier
>  of the UB 
> (PromoCash)","default":null},{"name":"brandOwnerCode","type":["null","string"],"doc":"External
>  Code of the brand 
> owner","default":null},{"name":"brandOwnerKey","type":["null","string"],"doc":"Identifier
>  of the brand 
> owner","default":null},{"name":"brandOwnerDesc","type":["null","string"],"doc":"Description
>  of the brand 
> owner","default":null},{"name":"brandKey","type":["null","string"],"doc":"Brand
>  
> code","default":null},{"name":"brandDesc","type":["null","string"],"doc":"Brand
>  
> description","default":null},{"name":"brandSubTypeKey","type":["null","string"],"doc":"Sub-qualification
>  
> key","default":null},{"name":"brandSubTypeDesc","type":["null","string"],"doc":"Sub-qualification
>  
> Description","default":null},{"name":"dispoKey","type":["null","string"],"doc":"Disponibility
>  
> code","default":null},{"name":"dispoDesc","type":["null","string"],"doc":"Disponibility
>  
> description","default":null},{"name":"negoOrigKey","type":["null","string"],"doc":"Identifier
>  of the origin of the 
> négociation","default":null},{"name":"negoOrigDesc","type":["null","string"],"doc":"Description
>  of the origin of the 
> négociation","default":null},{"name":"pceLevelType","type":["null","string"],"doc":"Price
>  Level 
> type","default":null},{"name":"prdCompoDesc","type":["null","string"],"doc":"Description
>  ot the product 
> composition","default":null},{"name":"modelBarcode","type":["null","string"],"doc":"Barcode
>  of the model 
> (textile)","default":null},{"name":"modelDesc","type":["null","string"],"doc":"Description
>  of the model 
> (textile)","default":null},{"name":"classDescShort","type":["null","string"],"doc":"Class
>  (Product Family) short 
> description","default":null},{"name":"mainSupplierPrcKey","type":["null","string"],"doc":"Identifier
>  of the Main Supplier for the previous 
> exercise","default":null},{"name":"purStopDate","type":["null","string"],"doc":"Date
>  of STOP ITEM on 
> purchase","default":null},{"name":"bcpBrdTypeKey","type":["null","string"],"doc":"identifier
>  of the qualification in 
> BCP","default":null},{"name":"bcpBrdTypeDesc","type":["null","string"],"doc":"Description
>  of the qualification in 
> BCP","default":null},{"name":"bcpBrdQualifKey","type":["null","string"],"doc":"identifier
>  of the brand qualification in 
> BCP","default":null},{"name":"bcpBrdQualifDesc","type":["null","string"],"doc":"Description
>  of the brand qualification in 
> BCP","default":null},{"name":"bcpBrdSubQualifKey","type":["null","string"],"doc":"Identifier
>  of the brand sub-qualification in 
> BCP","default":null},{"name":"bcpBrdSubQualifDesc","type":["null","string"],"doc":"Description
>  of the brand sub-qualification in 
> BCP","default":null},{"name":"bcpHypAppelPrixCode","type":["null","string"],"doc":"National
>  POS Price short code for 
> Hypermarket","default":null},{"name":"bcpSupAppelPrixCode","type":["null","string"],"doc":"National
>  POS Price short code for 
> Supermarket","default":null},{"name":"supUgKey","type":["null","string"],"doc":"Caroline
>  Super Stock Keeping Unit (UG) 
> Key","default":null},{"name":"supUgDesc","type":["null","string"],"doc":"Caroline
>  Super Stock Keeping Unit (UG) 
> Description","default":null},{"name":"prdRefNature","type":["null","string"],"doc":"Product
>  reference 
> nature","default":null},{"name":"prdModKey","type":["null","string"],"doc":"Code
>  of manufacturing 
> mode","default":null},{"name":"prdModDesc","type":["null","string"],"doc":"Description
>  of manufacturing 
> mode","default":null},{"name":"productLineDesc","type":["null","string"],"doc":"Product
>  Line 
> Description","default":null},{"name":"brandMasterKey","type":["null","string"],"doc":"Identifier
>  of the Master 
> Brand","default":null},{"name":"brandMasterDesc","type":["null","string"],"doc":"Description
>  of the Master 
> Brand","default":null},{"name":"prdOrigOpKey","type":["null","string"],"doc":"Operational
>  Identifier of the origin of the 
> product","default":null},{"name":"prdOrigOpDesc","type":["null","string"],"doc":"Operational
>  Description of the origin of the 
> product","default":null},{"name":"mbcItemKey","type":["null","string"],"doc":"MBC
>  Atica Hyper Stock Keeping Unit (AG) 
> Key","default":null},{"name":"hypTypoKey","type":["null","string"],"doc":"Product
>  Typology for 
> Hypermarkets","default":null},{"name":"supTypoKey","type":["null","string"],"doc":"Product
>  Typology for 
> Supermarkets","default":null},{"name":"prxTypoKey","type":["null","string"],"doc":"Product
>  Typology for Proximity 
> Stores","default":null},{"name":"cacTypoKey","type":["null","string"],"doc":"Product
>  Typology for Cash & Carry 
> Stores","default":null},{"name":"prdPackFlag","type":["null","string"],"doc":"Divisible
>  product pack 
> flag","default":null},{"name":"trendCode","type":["null","string"],"doc":"Code
>  of textile 
> classification","default":null},{"name":"trendDesc","type":["null","string"],"doc":"Description
>  of textile 
> classification","default":null},{"name":"prdSeasonCode","type":["null","string"],"doc":"Code
>  of the 
> Season","default":null},{"name":"mbcSubClassKey","type":["null","string"],"doc":"MBC
>  sub 
> family","default":null},{"name":"mbcSizeCode","type":["null","string"],"doc":"Size
>  of the 
> article","default":null},{"name":"mbcColorCode","type":["null","string"],"doc":"Color
>  of the 
> article","default":null},{"name":"ubcKey","type":["null","string"],"doc":"Identifier
>  of the Consumer Unit of Need (UBC 
> OptiCAT)","default":null},{"name":"ubcDesc","type":["null","string"],"doc":"Description
>  of the Consumer Unit of Need (UBC 
> OptiCAT)","default":null},{"name":"hypUgKey","type":["null","string"],"doc":"Caroline
>  Hyper Stock Keeping Unit (UG) 
> Key","default":null},{"name":"hypUgDesc","type":["null","string"],"doc":"Caroline
>  Hyper Stock Keeping Unit (UG) 
> Description","default":null},{"name":"prxUgKey","type":["null","string"],"doc":"Proxy
>  Stock Keeping Unit (UG) 
> Key","default":null},{"name":"prxUgDesc","type":["null","string"],"doc":"Proxy
>  Stock Keeping Unit (UG) 
> Description","default":null},{"name":"pmcUgKey","type":["null","string"],"doc":"PromoCash
>  Stock Keeping Unit (UG) 
> Key","default":null},{"name":"pmcUgDesc","type":["null","string"],"doc":"PromoCash
>  Stock Keeping Unit (UG) 
> Description","default":null},{"name":"dctHypDirectFlag","type":["null","string"],"doc":"Indicates
>  that permanent product should use Direct Flow in 
> HyperMarket","default":null},{"name":"dctSupDirectFlag","type":["null","string"],"doc":"Indicates
>  that permanent product should use Direct Flow in 
> SuperMarket","default":null},{"name":"crpAttributes","type":["null",{"type":"array","items":{"type":"record","name":"CrpAttributes","doc":"CRP
>  Product characteristics 
> Attributes","fields":[{"name":"crpKey","type":["null","string"],"doc":"CRP 
> Key","default":null},{"name":"crpCode","type":["null","string"],"doc":"CRP 
> external 
> code","default":null},{"name":"crpValueBegDate","type":["null","string"],"doc":"CRP
>  value begin date 
> YYYYMMDD","default":null},{"name":"crpValueEndDate","type":["null","string"],"doc":"CRP
>  value finish date 
> YYYYMMDD","default":null},{"name":"catCrpKey","type":["null","string"],"doc":"CRP
>  category 
> key","default":null},{"name":"catCrpDesc","type":["null","string"],"doc":"CRP 
> category 
> descrpition","default":null},{"name":"subCatCrpKey","type":["null","string"],"doc":"CRP
>  subcategory 
> key","default":null},{"name":"subCatCrpDesc","type":["null","string"],"doc":"CRP
>  subcategory 
> descrpition","default":null},{"name":"crpNatDesc","type":["null","string"],"doc":"CRP
>  national 
> description","default":null},{"name":"crpEngDesc","type":["null","string"],"doc":"CRP
>  english 
> description","default":null},{"name":"crpAddDesc","type":["null",{"type":"array","items":{"type":"record","name":"CrpAddDesc","doc":"CRP
>  Product characteristics additionnal 
> description","fields":[{"name":"crpAddNatDesc","type":["null","string"],"doc":"CRP
>  national additional 
> description","default":null},{"name":"crpAddEngDesc","type":["null","string"],"doc":"CRP
>  english additional description","default":null}]}}],"doc":"Additional 
> descriptions","default":null},{"name":"crpDesc","type":["null","string"],"doc":"CRP
>  
> description","default":null},{"name":"crpValueFormat","type":["null","string"],"doc":"CRP
>  Value 
> format","default":null},{"name":"crpValueLength","type":["null","int"],"doc":"CRP
>  Value 
> length","default":null},{"name":"crpUnitNatSymbol","type":["null","string"],"doc":"Mesurement
>  unit key national 
> symbol","default":null},{"name":"crpUnitEngSymbol","type":["null","string"],"doc":"Mesurement
>  unit key english 
> symbol","default":null},{"name":"crpUnitNatDesc","type":["null","string"],"doc":"Mesurement
>  unit key national 
> description","default":null},{"name":"crpUnitEngDesc","type":["null","string"],"doc":"Mesurement
>  unit key english 
> description","default":null},{"name":"crpUnitNatValue","type":["null","string"],"doc":"CRP
>  national 
> value","default":null},{"name":"crpUnitEngValue","type":["null","string"],"doc":"CRP
>  english 
> value","default":null},{"name":"crpLink","type":["null","string"],"doc":"CRP 
> link between 
> values","default":null},{"name":"crpSourceKey","type":["null","string"],"doc":"CRP
>  code from 
> source","default":null},{"name":"crpSourceDesc","type":["null","string"],"doc":"CRP
>  source 
> description","default":null},{"name":"extDateTime","type":["null","string"],"doc":"extraction
>  timestamp ISO8601 deprecated yyyy-MM-dd''T''HH:mm:ss.SSSZZ use 
> yyyyMMdd''T''HHmmss.SSSZ","default":null}]}}],"doc":"CRP Product 
> characteristics 
> Attributes","default":null},{"name":"hypSalPceUnitType","type":["null","string"],"doc":"Hyper
>  Sales Price level type (UVC, 
> UCT)","default":null},{"name":"supSalPceUnitType","type":["null","string"],"doc":"Super
>  Sales Price level type (UVC, 
> UCT)","default":null},{"name":"prxSalPceUnitType","type":["null","string"],"doc":"Proxi
>  Sales Price level type (UVC, 
> UCT)","default":null},{"name":"pmcSalPceUnitType","type":["null","string"],"doc":"Cash
>  and Carry Sales Price level type (UVC, 
> UCT)","default":null},{"name":"hypPluCode","type":["null","string"],"doc":"Hyper
>  PLU 
> Code","default":null},{"name":"supPluCode","type":["null","string"],"doc":"Super
>  PLU 
> Code","default":null},{"name":"prxPluCode","type":["null","string"],"doc":"Proxi
>  PLU 
> Code","default":null},{"name":"pmcPluCode","type":["null","string"],"doc":"Cash
>  and Carry PLU 
> Code","default":null},{"name":"prdSupplierCode","type":["null","string"],"doc":"Reference
>  of the product by the 
> supplier","default":null},{"name":"prdMarketingDesc","type":["null","string"],"doc":"Marketing
>  description of the 
> product","default":null},{"name":"prdPackaging","type":["null","string"],"doc":"Packaging
>  of the 
> products","default":null},{"name":"prdMarketingSaleUnit","type":["null","string"],"doc":"Type
>  of sale 
> Unit","default":null},{"name":"prdVariableTypePrep","type":["null","string"],"doc":"Type
>  of preparation 
> variable","default":null},{"name":"prdPublishableFlag","type":["null","string"],"doc":"Publishable
>  
> flag","default":null},{"name":"specialTaxType","type":["null","string"],"doc":"Product
>  Special tax 
> Type","default":null},{"name":"prdDutyType","type":["null","string"],"doc":"Product
>  Duty tax 
> Type","default":null},{"name":"vatCode","type":["null","string"],"doc":"Identier
>  of 
> VAT","default":null},{"name":"prdAlcoholProof","type":["null","string"],"doc":"Product
>  Alcohol 
> Proof","default":null},{"name":"prdShortDesc","type":["null","string"],"doc":"Product
>  short 
> description","default":null},{"name":"productServiceType","type":["null","string"],"doc":"Type
>  of the 
> Service","default":null},{"name":"productServiceDesc","type":["null","string"],"doc":"Description
>  of the 
> service","default":null},{"name":"productPurchaseSaleType","type":["null","string"],"doc":"Type
>  of the product 
> (Purchase/Sale)","default":null},{"name":"prdDryNetWeight","type":["null","double"],"doc":"Dry
>  net weight of the sales 
> unit","default":null},{"name":"prdPackWeight","type":["null","double"],"doc":"Weight
>  of the packaged saled 
> product","default":null},{"name":"prdPackHeight","type":["null","double"],"doc":"Height
>  of the packaged saled 
> product","default":null},{"name":"prdPackWidth","type":["null","double"],"doc":"Width
>  of the packaged saled 
> product","default":null},{"name":"prdPackLength","type":["null","double"],"doc":"Length
>  of the packaged saled 
> product","default":null},{"name":"srcTimestamp","type":["null","string"],"doc":"Source
>  
> Timestamp","default":null},{"name":"trtTimestamp","type":["null","string"],"doc":"Processing
>  Timestamp","default":null}]}
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to