This is an automated email from the ASF dual-hosted git repository.
chengpan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git
The following commit(s) were added to refs/heads/master by this push:
new 4c915b7a8 [KYUUBI #5550] Optimizing TPC-DS dataset generation for 10x
speedup
4c915b7a8 is described below
commit 4c915b7a887f51190d6cd9d1ca65c4f585ea0cad
Author: Fu Chen <[email protected]>
AuthorDate: Tue Oct 31 13:19:17 2023 +0800
[KYUUBI #5550] Optimizing TPC-DS dataset generation for 10x speedup
### _Why are the changes needed?_
1. This PR fixes the precision loss issue in `xx_gmt_offset`. Please note
that since `xx_gmt_offset` is of integer type, there is no actual loss of
precision.
```
trino:tiny> select cc_gmt_offset from call_center ;
cc_gmt_offset
---------------
-5.00
-5.00
```
Before this PR:
```scala
scala> spark.sql("select cc_gmt_offset from tpcds.tiny.call_center").show
+-------------+
|cc_gmt_offset|
+-------------+
| -5|
| -5|
+-------------+
```
After this PR:
```scala
scala> spark.sql("select cc_gmt_offset from tpcds.tiny.call_center").show
+-------------+
|cc_gmt_offset|
+-------------+
| -5.00|
| -5.00|
+-------------+
```
2. This PR accelerates the generation of the TPC-DS dataset by optimizing
the way Rows are generated.
Before this PR, The previous process involved converting **Trino TableRow**
into **String Row** and then further into **Spark InternalRow**.
After this PR, we have streamlined the process by directly converting
**Trino TableRow** into **Spark InternalRow**, eliminating unnecessary toString
operations. This change significantly improves the speed of TPC-DS dataset
generation.
```scala
spark.table("tpcds.sf1000.catalog_sales").foreach(r => ())
```
Task Duration before this PR:

Task Duration after this PR:

### _How was this patch tested?_
- New UT `tpcds.tiny count and checksum`
- Compare checksum values before and after this PR on the 1TB dataset
| table_name | count | checksum |
|------------------------|-----------------|---------------------------|
| call_center | 42 | 95607401475 |
| catalog_page | 30000 | 64470199469085 |
| catalog_returns | 143996756 | 309202327050775220 |
| catalog_sales | 1439980416 | 3092267266923848000 |
| customer | 12000000 | 25769069905636795 |
| customer_address | 6000000 | 12889423380880973 |
| customer_demographics | 1920800 | 4124183189708148 |
| date_dim | 73049 | 156926081012862 |
| household_demographics | 7200 | 15494873325812 |
| income_band | 20 | 41180951007 |
| inventory | 783000000 | 1681487454682584456 |
| item | 300000 | 643000708260945 |
| promotion | 1500 | 3270935493709 |
| reason | 65 | 118806664977 |
| ship_mode | 20 | 52349078860 |
| store | 1002 | 2096408105720 |
| store_returns | 287999764 | 618451374856897114 |
| store_sales | 2879987999 | 6184670571185100839 |
| time_dim | 86400 | 186045071019485 |
| warehouse | 20 | 31374161844 |
| web_page | 3000 | 6502456139647 |
| web_returns | 71997522 | 154614570845312413 |
| web_sales | 720000376 | 1546188452223821591 |
| web_site | 54 | 107485781738 |
### _Was this patch authored or co-authored using generative AI tooling?_
No
Closes #5562 from cfmcgrady/tpcds-perf.
Closes #5550
a789b9e70 [Fu Chen] maxPartitionBytes=384m
659e20912 [Fu Chen] style
916f6d276 [Fu Chen] unnecessary change
75981af8b [Fu Chen] tpcds perf
Authored-by: Fu Chen <[email protected]>
Signed-off-by: Cheng Pan <[email protected]>
---
.../spark/connector/tpcds/KyuubiTPCDSResults.scala | 167 +++
.../spark/connector/tpcds/TPCDSBatchScan.scala | 40 +-
.../kyuubi/spark/connector/tpcds/TPCDSConf.scala | 2 +-
.../connector/tpcds/row/KyuubiTableRows.scala | 1549 ++++++++++++++++++++
.../spark/connector/tpcds/TPCDSCatalogSuite.scala | 103 +-
5 files changed, 1790 insertions(+), 71 deletions(-)
diff --git
a/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/KyuubiTPCDSResults.scala
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/KyuubiTPCDSResults.scala
new file mode 100644
index 000000000..b11919009
--- /dev/null
+++
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/KyuubiTPCDSResults.scala
@@ -0,0 +1,167 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kyuubi.spark.connector.tpcds
+
+import java.lang.{Iterable => JIterable}
+import java.lang.reflect.InvocationTargetException
+import java.util.{Iterator => JIterator}
+
+import com.google.common.collect.AbstractIterator
+import io.trino.tpcds._
+import io.trino.tpcds.`type`.{Decimal => TPCDSDecimal}
+import io.trino.tpcds.row.generator.RowGenerator
+import org.apache.spark.sql.catalyst.InternalRow
+import org.apache.spark.sql.catalyst.expressions.GenericInternalRow
+import org.apache.spark.sql.catalyst.util.{DateTimeUtils, RebaseDateTime}
+import org.apache.spark.sql.types.{CharType, DateType, Decimal, DecimalType,
IntegerType, LongType, StringType, StructType, VarcharType}
+import org.apache.spark.unsafe.types.UTF8String
+
+import
org.apache.kyuubi.spark.connector.tpcds.KyuubiResultsIterator.{FALSE_STRING,
TRUE_STRING}
+import org.apache.kyuubi.spark.connector.tpcds.row.KyuubiTableRows
+
+class KyuubiTPCDSResults(
+ val table: Table,
+ val startingRowNumber: Long,
+ val rowCount: Long,
+ val session: Session,
+ val schema: StructType) extends JIterable[InternalRow] {
+
+ override def iterator: JIterator[InternalRow] =
+ new KyuubiResultsIterator(table, startingRowNumber, rowCount, session,
schema)
+}
+
+object KyuubiTPCDSResults {
+ def constructResults(table: Table, session: Session, schema: StructType):
KyuubiTPCDSResults = {
+ val chunkBoundaries = io.trino.tpcds.Parallel.splitWork(table, session)
+ new KyuubiTPCDSResults(
+ table,
+ chunkBoundaries.getFirstRow(),
+ chunkBoundaries.getLastRow(),
+ session,
+ schema)
+ }
+}
+
+class KyuubiResultsIterator(
+ val table: Table,
+ val startingRowNumber: Long,
+ val endingRowNumber: Long,
+ val session: Session,
+ val sparkSchema: StructType) extends AbstractIterator[InternalRow] {
+ private var rowNumber: Long = 0L
+ private var rowGenerator: RowGenerator = _
+ private var parentRowGenerator: Option[RowGenerator] = None
+ private var childRowGenerator: Option[RowGenerator] = None
+
+ try {
+ require(table != null, "table is null")
+ require(session != null, "session is null")
+ require(startingRowNumber >= 1, s"starting row number is less than 1:
$startingRowNumber")
+ require(
+ endingRowNumber <= session.getScaling.getRowCount(table),
+ s"starting row number is greater than the total rows in $table:
$endingRowNumber")
+ rowNumber = startingRowNumber
+ rowGenerator =
table.getRowGeneratorClass().getDeclaredConstructor().newInstance()
+ parentRowGenerator = if (table.isChild()) {
+
Some(table.getParent().getRowGeneratorClass().getDeclaredConstructor().newInstance())
+ } else None
+ childRowGenerator = if (table.hasChild()) {
+
Some(table.getChild().getRowGeneratorClass().getDeclaredConstructor().newInstance())
+ } else None
+ } catch {
+ case e @ (_: NoSuchMethodException |
+ _: InstantiationException |
+ _: InvocationTargetException |
+ _: IllegalAccessException) =>
+ throw new TpcdsException(e.toString());
+ }
+ skipRowsUntilStartingRowNumber(startingRowNumber)
+
+ private def skipRowsUntilStartingRowNumber(startingRowNumber: Long): Unit = {
+ rowGenerator.skipRowsUntilStartingRowNumber(startingRowNumber)
+
parentRowGenerator.foreach(_.skipRowsUntilStartingRowNumber(startingRowNumber))
+
childRowGenerator.foreach(_.skipRowsUntilStartingRowNumber(startingRowNumber))
+ }
+
+ override protected def computeNext(): InternalRow = {
+ if (rowNumber > endingRowNumber) {
+ return endOfData
+ }
+ val result = rowGenerator.generateRowAndChildRows(
+ rowNumber,
+ session,
+ parentRowGenerator.orNull,
+ childRowGenerator.orNull)
+ var row: InternalRow = null
+ if (!result.getRowAndChildRows.isEmpty) {
+ row =
toInternalRow(KyuubiTableRows.getValues(result.getRowAndChildRows.get(0)))
+ }
+
+ if (result.shouldEndRow) {
+ rowStop()
+ rowNumber += 1
+ }
+ if (result.getRowAndChildRows().isEmpty()) {
+ row = computeNext()
+ }
+ row
+ }
+
+ private def rowStop(): Unit = {
+ rowGenerator.consumeRemainingSeedsForRow()
+ parentRowGenerator.foreach(_.consumeRemainingSeedsForRow())
+ childRowGenerator.foreach(_.consumeRemainingSeedsForRow())
+ }
+
+ private val reusedRow = new Array[Any](sparkSchema.length)
+
+ def toInternalRow(values: Array[Any]): InternalRow = {
+ var i = 0
+ while (i < values.length) {
+ reusedRow(i) = (values(i), sparkSchema(i).dataType) match {
+ case (None | null, _) => null
+ case (Some(Options.DEFAULT_NULL_STRING), _) => null
+ case (Some(v: Boolean), _) => if (v) TRUE_STRING else FALSE_STRING
+ case (Some(v: Int), IntegerType) => v
+ case (Some(v: Long), IntegerType) => v.toInt
+ case (Some(v: Int), LongType) => v.toLong
+ case (Some(v: Long), LongType) => v
+ case (Some(v: Long), DateType) =>
+ RebaseDateTime.rebaseJulianToGregorianDays(v.toInt) -
DateTimeUtils.JULIAN_DAY_OF_EPOCH
+ case (Some(v), StringType) => UTF8String.fromString(v.toString)
+ case (Some(v), CharType(_)) => UTF8String.fromString(v.toString)
+ case (Some(v), VarcharType(_)) => UTF8String.fromString(v.toString)
+ case (Some(v: TPCDSDecimal), t: DecimalType) =>
+ Decimal(v.getNumber, t.precision, t.scale)
+ case (Some(v: Int), t: DecimalType) =>
+ val decimal = Decimal(v)
+ decimal.changePrecision(t.precision, t.scale)
+ decimal
+ case (Some(v), dt) => throw new IllegalArgumentException(
+ s"value: $v, value class: ${v.getClass.getName} type: $dt")
+ }
+ i += 1
+ }
+ new GenericInternalRow(reusedRow)
+ }
+}
+
+object KyuubiResultsIterator {
+ private val TRUE_STRING = UTF8String.fromString("Y")
+ private val FALSE_STRING = UTF8String.fromString("N")
+}
diff --git
a/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSBatchScan.scala
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSBatchScan.scala
index 291031c53..919e43342 100644
---
a/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSBatchScan.scala
+++
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSBatchScan.scala
@@ -17,20 +17,15 @@
package org.apache.kyuubi.spark.connector.tpcds
-import java.time.LocalDate
-import java.time.format.DateTimeFormatter
import java.util.OptionalLong
-import scala.collection.JavaConverters._
-
import io.trino.tpcds._
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.catalyst.InternalRow
import org.apache.spark.sql.connector.read._
import org.apache.spark.sql.types._
-import org.apache.spark.unsafe.types.UTF8String
-case class TPCDSTableChuck(table: String, scale: Double, parallelism: Int,
index: Int)
+case class TPCDSTableChunk(table: String, scale: Double, parallelism: Int,
index: Int)
extends InputPartition
class TPCDSBatchScan(
@@ -62,10 +57,10 @@ class TPCDSBatchScan(
override def readSchema: StructType = schema
override def planInputPartitions: Array[InputPartition] =
- (1 to parallelism).map { i => TPCDSTableChuck(table.getName, scale,
parallelism, i) }.toArray
+ (1 to parallelism).map { i => TPCDSTableChunk(table.getName, scale,
parallelism, i) }.toArray
def createReaderFactory: PartitionReaderFactory = (partition:
InputPartition) => {
- val chuck = partition.asInstanceOf[TPCDSTableChuck]
+ val chuck = partition.asInstanceOf[TPCDSTableChunk]
new TPCDSPartitionReader(chuck.table, chuck.scale, chuck.parallelism,
chuck.index, schema)
}
@@ -90,32 +85,9 @@ class TPCDSPartitionReader(
opt.toSession.withChunkNumber(index)
}
- private lazy val dateFmt: DateTimeFormatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd")
-
- private val reusedRow = new Array[Any](schema.length)
- private val iterator = Results
- .constructResults(chuckInfo.getOnlyTableToGenerate, chuckInfo)
- .iterator.asScala
- .map { _.get(0).asScala } // the 1st row is specific table row
- .map { stringRow =>
- var i = 0
- while (i < stringRow.length) {
- reusedRow(i) = (stringRow(i), schema(i).dataType) match {
- case (null, _) => null
- case (Options.DEFAULT_NULL_STRING, _) => null
- case (v, IntegerType) => v.toInt
- case (v, LongType) => v.toLong
- case (v, DateType) => LocalDate.parse(v, dateFmt).toEpochDay.toInt
- case (v, StringType) => UTF8String.fromString(v)
- case (v, CharType(_)) => UTF8String.fromString(v)
- case (v, VarcharType(_)) => UTF8String.fromString(v)
- case (v, DecimalType()) => Decimal(v)
- case (v, dt) => throw new IllegalArgumentException(s"value: $v,
type: $dt")
- }
- i += 1
- }
- InternalRow(reusedRow: _*)
- }
+ private val iterator = KyuubiTPCDSResults
+ .constructResults(chuckInfo.getOnlyTableToGenerate, chuckInfo, schema)
+ .iterator
private var currentRow: InternalRow = _
diff --git
a/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSConf.scala
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSConf.scala
index dbd22dc1a..3edbfaebf 100644
---
a/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSConf.scala
+++
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSConf.scala
@@ -81,5 +81,5 @@ object TPCDSConf {
val TPCDS_CONNECTOR_READ_CONF_PREFIX = s"$TPCDS_CONNECTOR_CONF_PREFIX.read"
val MAX_PARTITION_BYTES_CONF = "maxPartitionBytes"
- val MAX_PARTITION_BYTES_DEFAULT = "128m"
+ val MAX_PARTITION_BYTES_DEFAULT = "384m"
}
diff --git
a/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/row/KyuubiTableRows.scala
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/row/KyuubiTableRows.scala
new file mode 100644
index 000000000..544498d6e
--- /dev/null
+++
b/extensions/spark/kyuubi-spark-connector-tpcds/src/main/scala/org/apache/kyuubi/spark/connector/tpcds/row/KyuubiTableRows.scala
@@ -0,0 +1,1549 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kyuubi.spark.connector.tpcds.row
+
+import io.trino.tpcds.`type`.{Address, Decimal => TPCDSDecimal, Pricing}
+import io.trino.tpcds.generator.CallCenterGeneratorColumn._
+import io.trino.tpcds.generator.CatalogPageGeneratorColumn._
+import io.trino.tpcds.generator.CatalogReturnsGeneratorColumn._
+import io.trino.tpcds.generator.CatalogSalesGeneratorColumn._
+import io.trino.tpcds.generator.CustomerAddressGeneratorColumn._
+import io.trino.tpcds.generator.CustomerDemographicsGeneratorColumn._
+import io.trino.tpcds.generator.CustomerGeneratorColumn._
+import io.trino.tpcds.generator.DateDimGeneratorColumn._
+import io.trino.tpcds.generator.DbgenVersionGeneratorColumn._
+import io.trino.tpcds.generator.GeneratorColumn
+import io.trino.tpcds.generator.HouseholdDemographicsGeneratorColumn._
+import io.trino.tpcds.generator.IncomeBandGeneratorColumn._
+import io.trino.tpcds.generator.InventoryGeneratorColumn._
+import io.trino.tpcds.generator.ItemGeneratorColumn._
+import io.trino.tpcds.generator.PromotionGeneratorColumn._
+import io.trino.tpcds.generator.ReasonGeneratorColumn._
+import io.trino.tpcds.generator.ShipModeGeneratorColumn._
+import io.trino.tpcds.generator.StoreGeneratorColumn._
+import io.trino.tpcds.generator.StoreReturnsGeneratorColumn._
+import io.trino.tpcds.generator.StoreSalesGeneratorColumn._
+import io.trino.tpcds.generator.TimeDimGeneratorColumn._
+import io.trino.tpcds.generator.WarehouseGeneratorColumn._
+import io.trino.tpcds.generator.WebPageGeneratorColumn._
+import io.trino.tpcds.generator.WebReturnsGeneratorColumn._
+import io.trino.tpcds.generator.WebSalesGeneratorColumn._
+import io.trino.tpcds.generator.WebSiteGeneratorColumn._
+import io.trino.tpcds.row.{CallCenterRow, CatalogPageRow, CatalogReturnsRow,
CatalogSalesRow, CustomerAddressRow, CustomerDemographicsRow, CustomerRow,
DateDimRow, DbgenVersionRow, HouseholdDemographicsRow, IncomeBandRow,
InventoryRow, ItemRow, PromotionRow, ReasonRow, ShipModeRow, StoreReturnsRow,
StoreRow, StoreSalesRow, TableRow, TableRowWithNulls, TimeDimRow, WarehouseRow,
WebPageRow, WebReturnsRow, WebSalesRow, WebSiteRow}
+
+import
org.apache.kyuubi.spark.connector.tpcds.row.KyuubiTPCDSTableRowWithNullsUtils._
+import org.apache.kyuubi.util.reflect.{DynFields, DynMethods}
+
+object KyuubiTableRows {
+
+ implicit class StoreRowImplicits(storeRow: StoreRow) {
+ def getStoreSk: Long = StoreRowImplicits.storeSk.get(storeRow)
+ def getStoreId: String = StoreRowImplicits.storeId.get(storeRow)
+ def getRecStartDateId: Long =
StoreRowImplicits.recStartDateId.get(storeRow)
+ def getRecEndDateId: Long = StoreRowImplicits.recEndDateId.get(storeRow)
+ def getClosedDateId: Long = StoreRowImplicits.closedDateId.get(storeRow)
+ def getStoreName: String = StoreRowImplicits.storeName.get(storeRow)
+ def getEmployees: Int = StoreRowImplicits.employees.get(storeRow)
+ def getFloorSpace: Int = StoreRowImplicits.floorSpace.get(storeRow)
+ def getHours: String = StoreRowImplicits.hours.get(storeRow)
+ def getStoreManager: String = StoreRowImplicits.storeManager.get(storeRow)
+ def getMarketId: Int = StoreRowImplicits.marketId.get(storeRow)
+ def getDTaxPercentage: TPCDSDecimal =
StoreRowImplicits.dTaxPercentage.get(storeRow)
+ def getGeographyClass: String =
StoreRowImplicits.geographyClass.get(storeRow)
+ def getMarketDesc: String = StoreRowImplicits.marketDesc.get(storeRow)
+ def getMarketManager: String =
StoreRowImplicits.marketManager.get(storeRow)
+ def getDivisionId: Long = StoreRowImplicits.divisionId.get(storeRow)
+ def getDivisionName: String = StoreRowImplicits.divisionName.get(storeRow)
+ def getCompanyId: Long = StoreRowImplicits.companyId.get(storeRow)
+ def getCompanyName: String = StoreRowImplicits.companyName.get(storeRow)
+ def getAddress: Address = StoreRowImplicits.address.get(storeRow)
+ }
+ object StoreRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[StoreRow], field)
+ .buildChecked[T]()
+
+ lazy val storeSk = invoke[Long]("storeSk")
+ lazy val storeId = invoke[String]("storeId")
+ lazy val recStartDateId = invoke[Long]("recStartDateId")
+ lazy val recEndDateId = invoke[Long]("recEndDateId")
+ lazy val closedDateId = invoke[Long]("closedDateId")
+ lazy val storeName = invoke[String]("storeName")
+ lazy val employees = invoke[Int]("employees")
+ lazy val floorSpace = invoke[Int]("floorSpace")
+ lazy val hours = invoke[String]("hours")
+ lazy val storeManager = invoke[String]("storeManager")
+ lazy val marketId = invoke[Int]("marketId")
+ lazy val dTaxPercentage = invoke[TPCDSDecimal]("dTaxPercentage")
+ lazy val geographyClass = invoke[String]("geographyClass")
+ lazy val marketDesc = invoke[String]("marketDesc")
+ lazy val marketManager = invoke[String]("marketManager")
+ lazy val divisionId = invoke[Long]("divisionId")
+ lazy val divisionName = invoke[String]("divisionName")
+ lazy val companyId = invoke[Long]("companyId")
+ lazy val companyName = invoke[String]("companyName")
+ lazy val address = invoke[Address]("address")
+
+ def values(row: StoreRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getStoreSk, W_STORE_SK),
+ getOrNull(row, row.getStoreId, W_STORE_ID),
+ getDateOrNullFromJulianDays(row, row.getRecStartDateId,
W_STORE_REC_START_DATE_ID),
+ getDateOrNullFromJulianDays(row, row.getRecEndDateId,
W_STORE_REC_END_DATE_ID),
+ getOrNullForKey(row, row.getClosedDateId, W_STORE_CLOSED_DATE_ID),
+ getOrNull(row, row.getStoreName, W_STORE_NAME),
+ getOrNull(row, row.getEmployees, W_STORE_EMPLOYEES),
+ getOrNull(row, row.getFloorSpace, W_STORE_FLOOR_SPACE),
+ getOrNull(row, row.getHours, W_STORE_HOURS),
+ getOrNull(row, row.getStoreManager, W_STORE_MANAGER),
+ getOrNull(row, row.getMarketId, W_STORE_MARKET_ID),
+ getOrNull(row, row.getGeographyClass, W_STORE_GEOGRAPHY_CLASS),
+ getOrNull(row, row.getMarketDesc, W_STORE_MARKET_DESC),
+ getOrNull(row, row.getMarketManager, W_STORE_MARKET_MANAGER),
+ getOrNullForKey(row, row.getDivisionId, W_STORE_DIVISION_ID),
+ getOrNull(row, row.getDivisionName, W_STORE_DIVISION_NAME),
+ getOrNullForKey(row, row.getCompanyId, W_STORE_COMPANY_ID),
+ getOrNull(row, row.getCompanyName, W_STORE_COMPANY_NAME),
+ getOrNull(row, row.getAddress.getStreetNumber,
W_STORE_ADDRESS_STREET_NUM),
+ getOrNull(row, row.getAddress.getStreetName,
W_STORE_ADDRESS_STREET_NAME1),
+ getOrNull(row, row.getAddress.getStreetType,
W_STORE_ADDRESS_STREET_TYPE),
+ getOrNull(row, row.getAddress.getSuiteNumber, W_STORE_ADDRESS_SUITE_NUM),
+ getOrNull(row, row.getAddress.getCity, W_STORE_ADDRESS_CITY),
+ getOrNull(row, row.getAddress.getCounty, W_STORE_ADDRESS_COUNTY),
+ getOrNull(row, row.getAddress.getState, W_STORE_ADDRESS_STATE),
+ getOrNull(
+ row,
+ java.lang.String.format("%05d",
row.getAddress.getZip.asInstanceOf[Object]),
+ W_STORE_ADDRESS_ZIP),
+ getOrNull(row, row.getAddress.getCountry, W_STORE_ADDRESS_COUNTRY),
+ getOrNull(row, row.getAddress.getGmtOffset, W_STORE_ADDRESS_GMT_OFFSET),
+ getOrNull(row, row.getDTaxPercentage, W_STORE_TAX_PERCENTAGE))
+ }
+
+ implicit class ReasonRowImplicits(reasonRow: ReasonRow) {
+ def getRReasonSk: Long = ReasonRowImplicits.rReasonSk.get(reasonRow)
+ def getRReasonId: String = ReasonRowImplicits.rReasonId.get(reasonRow)
+ def getRReasonDescription: String =
ReasonRowImplicits.rReasonDescription.get(reasonRow)
+ }
+
+ object ReasonRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[ReasonRow], field)
+ .buildChecked[T]()
+ lazy val rReasonSk = invoke[Long]("rReasonSk")
+ lazy val rReasonId = invoke[String]("rReasonId")
+ lazy val rReasonDescription = invoke[String]("rReasonDescription")
+
+ def values(row: ReasonRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getRReasonSk, R_REASON_SK),
+ getOrNull(row, row.getRReasonId, R_REASON_ID),
+ getOrNull(row, row.getRReasonDescription, R_REASON_DESCRIPTION))
+ }
+
+ implicit class DbgenVersionRowImplicits(dbgenVersionRow: DbgenVersionRow) {
+ def getDvVersion: String =
DbgenVersionRowImplicits.dvVersion.get(dbgenVersionRow)
+ def getDvCreateDate: String =
DbgenVersionRowImplicits.dvCreateDate.get(dbgenVersionRow)
+ def getDvCreateTime: String =
DbgenVersionRowImplicits.dvCreateTime.get(dbgenVersionRow)
+ def getDvCmdlineArgs: String =
DbgenVersionRowImplicits.dvCmdlineArgs.get(dbgenVersionRow)
+ }
+
+ object DbgenVersionRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[DbgenVersionRow], field)
+ .buildChecked[T]()
+
+ lazy val dvVersion = invoke[String]("dvVersion")
+ lazy val dvCreateDate = invoke[String]("dvCreateDate")
+ lazy val dvCreateTime = invoke[String]("dvCreateTime")
+ lazy val dvCmdlineArgs = invoke[String]("dvCmdlineArgs")
+
+ def values(row: DbgenVersionRow): Array[Any] = Array(
+ getOrNull(row, row.getDvVersion, DV_VERSION),
+ getOrNull(row, row.getDvCreateDate, DV_CREATE_DATE),
+ getOrNull(row, row.getDvCreateTime, DV_CREATE_TIME),
+ getOrNull(row, row.getDvCmdlineArgs, DV_CMDLINE_ARGS))
+ }
+
+ implicit class ShipModeRowImplicits(shipModeRow: ShipModeRow) {
+ def getSmShipModeSk: Long =
ShipModeRowImplicits.smShipModeSk.get(shipModeRow)
+ def getSmShipModeId: String =
ShipModeRowImplicits.smShipModeId.get(shipModeRow)
+ def getSmType: String = ShipModeRowImplicits.smType.get(shipModeRow)
+ def getSmCode: String = ShipModeRowImplicits.smCode.get(shipModeRow)
+ def getSmCarrier: String = ShipModeRowImplicits.smCarrier.get(shipModeRow)
+ def getSmContract: String =
ShipModeRowImplicits.smContract.get(shipModeRow)
+ }
+
+ object ShipModeRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[ShipModeRow], field)
+ .buildChecked[T]()
+
+ lazy val smShipModeSk = invoke[Long]("smShipModeSk")
+ lazy val smShipModeId = invoke[String]("smShipModeId")
+ lazy val smType = invoke[String]("smType")
+ lazy val smCode = invoke[String]("smCode")
+ lazy val smCarrier = invoke[String]("smCarrier")
+ lazy val smContract = invoke[String]("smContract")
+
+ def values(row: ShipModeRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getSmShipModeSk, SM_SHIP_MODE_SK),
+ getOrNull(row, row.getSmShipModeId, SM_SHIP_MODE_ID),
+ getOrNull(row, row.getSmType, SM_TYPE),
+ getOrNull(row, row.getSmCode, SM_CODE),
+ getOrNull(row, row.getSmCarrier, SM_CARRIER),
+ getOrNull(row, row.getSmContract, SM_CONTRACT))
+ }
+
+ implicit class IncomeBandRowImplicits(incomeBandRow: IncomeBandRow) {
+ def getIbIncomeBandId: Int =
IncomeBandRowImplicits.ibIncomeBandId.get(incomeBandRow)
+ def getIbLowerBound: Int =
IncomeBandRowImplicits.ibLowerBound.get(incomeBandRow)
+ def getIbUpperBound: Int =
IncomeBandRowImplicits.ibUpperBound.get(incomeBandRow)
+ }
+
+ object IncomeBandRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[IncomeBandRow], field)
+ .buildChecked[T]()
+
+ lazy val ibIncomeBandId = invoke[Int]("ibIncomeBandId")
+ lazy val ibLowerBound = invoke[Int]("ibLowerBound")
+ lazy val ibUpperBound = invoke[Int]("ibUpperBound")
+
+ def values(row: IncomeBandRow): Array[Any] = Array(
+ getOrNull(row, row.getIbIncomeBandId, IB_INCOME_BAND_ID),
+ getOrNull(row, row.getIbLowerBound, IB_LOWER_BOUND),
+ getOrNull(row, row.getIbUpperBound, IB_UPPER_BOUND))
+ }
+
+ implicit class ItemRowImplicits(itemRow: ItemRow) {
+ def getIItemSk: Long = ItemRowImplicits.iItemSk.get(itemRow)
+ def getIItemId: String = ItemRowImplicits.iItemId.get(itemRow)
+ def getIRecStartDateId: Long =
ItemRowImplicits.iRecStartDateId.get(itemRow)
+ def getIRecEndDateId: Long = ItemRowImplicits.iRecEndDateId.get(itemRow)
+ def getIItemDesc: String = ItemRowImplicits.iItemDesc.get(itemRow)
+ def getICurrentPrice: TPCDSDecimal =
ItemRowImplicits.iCurrentPrice.get(itemRow)
+ def getIWholesaleCost: TPCDSDecimal =
ItemRowImplicits.iWholesaleCost.get(itemRow)
+ def getIBrandId: Long = ItemRowImplicits.iBrandId.get(itemRow)
+ def getIBrand: String = ItemRowImplicits.iBrand.get(itemRow)
+ def getIClassId: Long = ItemRowImplicits.iClassId.get(itemRow)
+ def getIClass: String = ItemRowImplicits.iClass.get(itemRow)
+ def getICategoryId: Long = ItemRowImplicits.iCategoryId.get(itemRow)
+ def getICategory: String = ItemRowImplicits.iCategory.get(itemRow)
+ def getIManufactId: Long = ItemRowImplicits.iManufactId.get(itemRow)
+ def getIManufact: String = ItemRowImplicits.iManufact.get(itemRow)
+ def getISize: String = ItemRowImplicits.iSize.get(itemRow)
+ def getIFormulation: String = ItemRowImplicits.iFormulation.get(itemRow)
+ def getIColor: String = ItemRowImplicits.iColor.get(itemRow)
+ def getIUnits: String = ItemRowImplicits.iUnits.get(itemRow)
+ def getIContainer: String = ItemRowImplicits.iContainer.get(itemRow)
+ def getIManagerId: Long = ItemRowImplicits.iManagerId.get(itemRow)
+ def getIProductName: String = ItemRowImplicits.iProductName.get(itemRow)
+ def getIPromoSk: Long = ItemRowImplicits.iPromoSk.get(itemRow)
+ }
+
+ object ItemRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[ItemRow], field)
+ .buildChecked[T]()
+
+ lazy val iItemSk = invoke[Long]("iItemSk")
+ lazy val iItemId = invoke[String]("iItemId")
+ lazy val iRecStartDateId = invoke[Long]("iRecStartDateId")
+ lazy val iRecEndDateId = invoke[Long]("iRecEndDateId")
+ lazy val iItemDesc = invoke[String]("iItemDesc")
+ lazy val iCurrentPrice = invoke[TPCDSDecimal]("iCurrentPrice")
+ lazy val iWholesaleCost = invoke[TPCDSDecimal]("iWholesaleCost")
+ lazy val iBrandId = invoke[Long]("iBrandId")
+ lazy val iBrand = invoke[String]("iBrand")
+ lazy val iClassId = invoke[Long]("iClassId")
+ lazy val iClass = invoke[String]("iClass")
+ lazy val iCategoryId = invoke[Long]("iCategoryId")
+ lazy val iCategory = invoke[String]("iCategory")
+ lazy val iManufactId = invoke[Long]("iManufactId")
+ lazy val iManufact = invoke[String]("iManufact")
+ lazy val iSize = invoke[String]("iSize")
+ lazy val iFormulation = invoke[String]("iFormulation")
+ lazy val iColor = invoke[String]("iColor")
+ lazy val iUnits = invoke[String]("iUnits")
+ lazy val iContainer = invoke[String]("iContainer")
+ lazy val iManagerId = invoke[Long]("iManagerId")
+ lazy val iProductName = invoke[String]("iProductName")
+ lazy val iPromoSk = invoke[Long]("iPromoSk")
+
+ def values(row: ItemRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getIItemSk, I_ITEM_SK),
+ getOrNull(row, row.getIItemId, I_ITEM_ID),
+ getDateOrNullFromJulianDays(row, row.getIRecStartDateId,
I_REC_START_DATE_ID),
+ getDateOrNullFromJulianDays(row, row.getIRecEndDateId,
I_REC_END_DATE_ID),
+ getOrNull(row, row.getIItemDesc, I_ITEM_DESC),
+ getOrNull(row, row.getICurrentPrice, I_CURRENT_PRICE),
+ getOrNull(row, row.getIWholesaleCost, I_WHOLESALE_COST),
+ getOrNullForKey(row, row.getIBrandId, I_BRAND_ID),
+ getOrNull(row, row.getIBrand, I_BRAND),
+ getOrNullForKey(row, row.getIClassId, I_CLASS_ID),
+ getOrNull(row, row.getIClass, I_CLASS),
+ getOrNullForKey(row, row.getICategoryId, I_CATEGORY_ID),
+ getOrNull(row, row.getICategory, I_CATEGORY),
+ getOrNullForKey(row, row.getIManufactId, I_MANUFACT_ID),
+ getOrNull(row, row.getIManufact, I_MANUFACT),
+ getOrNull(row, row.getISize, I_SIZE),
+ getOrNull(row, row.getIFormulation, I_FORMULATION),
+ getOrNull(row, row.getIColor, I_COLOR),
+ getOrNull(row, row.getIUnits, I_UNITS),
+ getOrNull(row, row.getIContainer, I_CONTAINER),
+ getOrNullForKey(row, row.getIManagerId, I_MANAGER_ID),
+ getOrNull(row, row.getIProductName, I_PRODUCT_NAME))
+ }
+
+ implicit class CustomerDemographicsRowImplicits(
+ customerDemographicsRow: CustomerDemographicsRow) {
+ def getCdDemoSk: Long =
CustomerDemographicsRowImplicits.cdDemoSk.get(customerDemographicsRow)
+ def getCdGender: String =
CustomerDemographicsRowImplicits.cdGender.get(customerDemographicsRow)
+ def getCdMaritalStatus: String =
+
CustomerDemographicsRowImplicits.cdMaritalStatus.get(customerDemographicsRow)
+ def getCdEducationStatus: String =
+
CustomerDemographicsRowImplicits.cdEducationStatus.get(customerDemographicsRow)
+ def getCdPurchaseEstimate: Int =
+
CustomerDemographicsRowImplicits.cdPurchaseEstimate.get(customerDemographicsRow)
+ def getCdCreditRating: String =
+
CustomerDemographicsRowImplicits.cdCreditRating.get(customerDemographicsRow)
+ def getCdDepCount: Int =
+ CustomerDemographicsRowImplicits.cdDepCount.get(customerDemographicsRow)
+ def getCdDepEmployedCount: Int =
+
CustomerDemographicsRowImplicits.cdDepEmployedCount.get(customerDemographicsRow)
+ def getCdDepCollegeCount: Int =
+
CustomerDemographicsRowImplicits.cdDepCollegeCount.get(customerDemographicsRow)
+ }
+
+ object CustomerDemographicsRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[CustomerDemographicsRow], field)
+ .buildChecked[T]()
+
+ lazy val cdDemoSk = invoke[Long]("cdDemoSk")
+ lazy val cdGender = invoke[String]("cdGender")
+ lazy val cdMaritalStatus = invoke[String]("cdMaritalStatus")
+ lazy val cdEducationStatus = invoke[String]("cdEducationStatus")
+ lazy val cdPurchaseEstimate = invoke[Int]("cdPurchaseEstimate")
+ lazy val cdCreditRating = invoke[String]("cdCreditRating")
+ lazy val cdDepCount = invoke[Int]("cdDepCount")
+ lazy val cdDepEmployedCount = invoke[Int]("cdDepEmployedCount")
+ lazy val cdDepCollegeCount = invoke[Int]("cdDepCollegeCount")
+
+ def values(row: CustomerDemographicsRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getCdDemoSk, CD_DEMO_SK),
+ getOrNull(row, row.getCdGender, CD_GENDER),
+ getOrNull(row, row.getCdMaritalStatus, CD_MARITAL_STATUS),
+ getOrNull(row, row.getCdEducationStatus, CD_EDUCATION_STATUS),
+ getOrNull(row, row.getCdPurchaseEstimate, CD_PURCHASE_ESTIMATE),
+ getOrNull(row, row.getCdCreditRating, CD_CREDIT_RATING),
+ getOrNull(row, row.getCdDepCount, CD_DEP_COUNT),
+ getOrNull(row, row.getCdDepEmployedCount, CD_DEP_EMPLOYED_COUNT),
+ getOrNull(row, row.getCdDepCollegeCount, CD_DEP_COLLEGE_COUNT))
+ }
+
+ implicit class TimeDimRowImplicits(timeDimRow: TimeDimRow) {
+ def getTTimeSk: Long = TimeDimRowImplicits.tTimeSk.get(timeDimRow)
+ def getTTimeId: String = TimeDimRowImplicits.tTimeId.get(timeDimRow)
+ def getTTime: Int = TimeDimRowImplicits.tTime.get(timeDimRow)
+ def getTHour: Int = TimeDimRowImplicits.tHour.get(timeDimRow)
+ def getTMinute: Int = TimeDimRowImplicits.tMinute.get(timeDimRow)
+ def getTSecond: Int = TimeDimRowImplicits.tSecond.get(timeDimRow)
+ def getTAmPm: String = TimeDimRowImplicits.tAmPm.get(timeDimRow)
+ def getTShift: String = TimeDimRowImplicits.tShift.get(timeDimRow)
+ def getTSubShift: String = TimeDimRowImplicits.tSubShift.get(timeDimRow)
+ def getTMealTime: String = TimeDimRowImplicits.tMealTime.get(timeDimRow)
+ }
+
+ object TimeDimRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[TimeDimRow], field)
+ .buildChecked[T]()
+
+ lazy val tTimeSk = invoke[Long]("tTimeSk")
+ lazy val tTimeId = invoke[String]("tTimeId")
+ lazy val tTime = invoke[Int]("tTime")
+ lazy val tHour = invoke[Int]("tHour")
+ lazy val tMinute = invoke[Int]("tMinute")
+ lazy val tSecond = invoke[Int]("tSecond")
+ lazy val tAmPm = invoke[String]("tAmPm")
+ lazy val tShift = invoke[String]("tShift")
+ lazy val tSubShift = invoke[String]("tSubShift")
+ lazy val tMealTime = invoke[String]("tMealTime")
+
+ def values(row: TimeDimRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getTTimeSk, T_TIME_SK),
+ getOrNull(row, row.getTTimeId, T_TIME_ID),
+ getOrNull(row, row.getTTime, T_TIME),
+ getOrNull(row, row.getTHour, T_HOUR),
+ getOrNull(row, row.getTMinute, T_MINUTE),
+ getOrNull(row, row.getTSecond, T_SECOND),
+ getOrNull(row, row.getTAmPm, T_AM_PM),
+ getOrNull(row, row.getTShift, T_SHIFT),
+ getOrNull(row, row.getTSubShift, T_SUB_SHIFT),
+ getOrNull(row, row.getTMealTime, T_MEAL_TIME))
+ }
+
+ implicit class WebSiteRowImplicits(webSiteRow: WebSiteRow) {
+ def getWebSiteSk: Long = WebSiteRowImplicits.webSiteSk.get(webSiteRow)
+ def getWebSiteId: String = WebSiteRowImplicits.webSiteId.get(webSiteRow)
+ def getWebRecStartDateId: Long =
WebSiteRowImplicits.webRecStartDateId.get(webSiteRow)
+ def getWebRecEndDateId: Long =
WebSiteRowImplicits.webRecEndDateId.get(webSiteRow)
+ def getWebName: String = WebSiteRowImplicits.webName.get(webSiteRow)
+ def getWebOpenDate: Long = WebSiteRowImplicits.webOpenDate.get(webSiteRow)
+ def getWebCloseDate: Long =
WebSiteRowImplicits.webCloseDate.get(webSiteRow)
+ def getWebClass: String = WebSiteRowImplicits.webClass.get(webSiteRow)
+ def getWebManager: String = WebSiteRowImplicits.webManager.get(webSiteRow)
+ def getWebMarketId: Int = WebSiteRowImplicits.webMarketId.get(webSiteRow)
+ def getWebMarketClass: String =
WebSiteRowImplicits.webMarketClass.get(webSiteRow)
+ def getWebMarketDesc: String =
WebSiteRowImplicits.webMarketDesc.get(webSiteRow)
+ def getWebMarketManager: String =
WebSiteRowImplicits.webMarketManager.get(webSiteRow)
+ def getWebCompanyId: Int = WebSiteRowImplicits.webCompanyId.get(webSiteRow)
+ def getWebCompanyName: String =
WebSiteRowImplicits.webCompanyName.get(webSiteRow)
+ def getWebAddress: Address = WebSiteRowImplicits.webAddress.get(webSiteRow)
+ def getWebTaxPercentage: TPCDSDecimal =
WebSiteRowImplicits.webTaxPercentage.get(webSiteRow)
+ }
+
+ object WebSiteRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[WebSiteRow], field)
+ .buildChecked[T]()
+
+ lazy val webSiteSk = invoke[Long]("webSiteSk")
+ lazy val webSiteId = invoke[String]("webSiteId")
+ lazy val webRecStartDateId = invoke[Long]("webRecStartDateId")
+ lazy val webRecEndDateId = invoke[Long]("webRecEndDateId")
+ lazy val webName = invoke[String]("webName")
+ lazy val webOpenDate = invoke[Long]("webOpenDate")
+ lazy val webCloseDate = invoke[Long]("webCloseDate")
+ lazy val webClass = invoke[String]("webClass")
+ lazy val webManager = invoke[String]("webManager")
+ lazy val webMarketId = invoke[Int]("webMarketId")
+ lazy val webMarketClass = invoke[String]("webMarketClass")
+ lazy val webMarketDesc = invoke[String]("webMarketDesc")
+ lazy val webMarketManager = invoke[String]("webMarketManager")
+ lazy val webCompanyId = invoke[Int]("webCompanyId")
+ lazy val webCompanyName = invoke[String]("webCompanyName")
+ lazy val webAddress = invoke[Address]("webAddress")
+ lazy val webTaxPercentage = invoke[TPCDSDecimal]("webTaxPercentage")
+
+ def values(row: WebSiteRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getWebSiteSk, WEB_SITE_SK),
+ getOrNull(row, row.getWebSiteId, WEB_SITE_ID),
+ getDateOrNullFromJulianDays(row, row.getWebRecStartDateId,
WEB_REC_START_DATE_ID),
+ getDateOrNullFromJulianDays(row, row.getWebRecEndDateId,
WEB_REC_END_DATE_ID),
+ getOrNull(row, row.getWebName, WEB_NAME),
+ getOrNullForKey(row, row.getWebOpenDate, WEB_OPEN_DATE),
+ getOrNullForKey(row, row.getWebCloseDate, WEB_CLOSE_DATE),
+ getOrNull(row, row.getWebClass, WEB_CLASS),
+ getOrNull(row, row.getWebManager, WEB_MANAGER),
+ getOrNull(row, row.getWebMarketId, WEB_MARKET_ID),
+ getOrNull(row, row.getWebMarketClass, WEB_MARKET_CLASS),
+ getOrNull(row, row.getWebMarketDesc, WEB_MARKET_DESC),
+ getOrNull(row, row.getWebMarketManager, WEB_MARKET_MANAGER),
+ getOrNull(row, row.getWebCompanyId, WEB_COMPANY_ID),
+ getOrNull(row, row.getWebCompanyName, WEB_COMPANY_NAME),
+ getOrNull(row, row.getWebAddress.getStreetNumber(),
WEB_ADDRESS_STREET_NUM),
+ getOrNull(row, row.getWebAddress.getStreetName(),
WEB_ADDRESS_STREET_NAME1),
+ getOrNull(row, row.getWebAddress.getStreetType(),
WEB_ADDRESS_STREET_TYPE),
+ getOrNull(row, row.getWebAddress.getSuiteNumber(),
WEB_ADDRESS_SUITE_NUM),
+ getOrNull(row, row.getWebAddress.getCity(), WEB_ADDRESS_CITY),
+ getOrNull(row, row.getWebAddress.getCounty(), WEB_ADDRESS_COUNTY),
+ getOrNull(row, row.getWebAddress.getState(), WEB_ADDRESS_STATE),
+ getOrNull(
+ row,
+ java.lang.String.format("%05d",
row.getWebAddress.getZip().asInstanceOf[Object]),
+ WEB_ADDRESS_ZIP),
+ getOrNull(row, row.getWebAddress.getCountry(), WEB_ADDRESS_COUNTRY),
+ getOrNull(row, row.getWebAddress.getGmtOffset(), WEB_ADDRESS_GMT_OFFSET),
+ getOrNull(row, row.getWebTaxPercentage, WEB_TAX_PERCENTAGE))
+ }
+
+ implicit class HouseholdDemographicsRowImplicits(
+ householdDemographicsRow: HouseholdDemographicsRow) {
+ def getHdDemoSk: Long =
HouseholdDemographicsRowImplicits.hdDemoSk.get(householdDemographicsRow)
+ def getHdIncomeBandId: Long =
+
HouseholdDemographicsRowImplicits.hdIncomeBandId.get(householdDemographicsRow)
+ def getHdBuyPotential: String =
+
HouseholdDemographicsRowImplicits.hdBuyPotential.get(householdDemographicsRow)
+ def getHdDepCount: Int =
+
HouseholdDemographicsRowImplicits.hdDepCount.get(householdDemographicsRow)
+ def getHdVehicleCount: Int =
+
HouseholdDemographicsRowImplicits.hdVehicleCount.get(householdDemographicsRow)
+ }
+
+ object HouseholdDemographicsRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[HouseholdDemographicsRow], field)
+ .buildChecked[T]()
+
+ lazy val hdDemoSk = invoke[Long]("hdDemoSk")
+ lazy val hdIncomeBandId = invoke[Long]("hdIncomeBandId")
+ lazy val hdBuyPotential = invoke[String]("hdBuyPotential")
+ lazy val hdDepCount = invoke[Int]("hdDepCount")
+ lazy val hdVehicleCount = invoke[Int]("hdVehicleCount")
+
+ def values(row: HouseholdDemographicsRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getHdDemoSk, HD_DEMO_SK),
+ getOrNullForKey(row, row.getHdIncomeBandId, HD_INCOME_BAND_ID),
+ getOrNull(row, row.getHdBuyPotential, HD_BUY_POTENTIAL),
+ getOrNull(row, row.getHdDepCount, HD_DEP_COUNT),
+ getOrNull(row, row.getHdVehicleCount, HD_VEHICLE_COUNT))
+ }
+
+ implicit class PromotionRowImplicits(promotionRow: PromotionRow) {
+ def getPPromoSk: Long = PromotionRowImplicits.pPromoSk.get(promotionRow)
+ def getPPromoId: String = PromotionRowImplicits.pPromoId.get(promotionRow)
+ def getPStartDateId: Long =
PromotionRowImplicits.pStartDateId.get(promotionRow)
+ def getPEndDateId: Long =
PromotionRowImplicits.pEndDateId.get(promotionRow)
+ def getPItemSk: Long = PromotionRowImplicits.pItemSk.get(promotionRow)
+ def getPCost: TPCDSDecimal = PromotionRowImplicits.pCost.get(promotionRow)
+ def getPResponseTarget: Int =
PromotionRowImplicits.pResponseTarget.get(promotionRow)
+ def getPPromoName: String =
PromotionRowImplicits.pPromoName.get(promotionRow)
+ def isPChannelDmail: Boolean =
PromotionRowImplicits.pChannelDmail.get(promotionRow)
+ def isPChannelEmail: Boolean =
PromotionRowImplicits.pChannelEmail.get(promotionRow)
+ def isPChannelCatalog: Boolean =
PromotionRowImplicits.pChannelCatalog.get(promotionRow)
+ def isPChannelTv: Boolean =
PromotionRowImplicits.pChannelTv.get(promotionRow)
+ def isPChannelRadio: Boolean =
PromotionRowImplicits.pChannelRadio.get(promotionRow)
+ def isPChannelPress: Boolean =
PromotionRowImplicits.pChannelPress.get(promotionRow)
+ def isPChannelEvent: Boolean =
PromotionRowImplicits.pChannelEvent.get(promotionRow)
+ def isPChannelDemo: Boolean =
PromotionRowImplicits.pChannelDemo.get(promotionRow)
+ def getPChannelDetails: String =
PromotionRowImplicits.pChannelDetails.get(promotionRow)
+ def getPPurpose: String = PromotionRowImplicits.pPurpose.get(promotionRow)
+ def isPDiscountActive: Boolean =
PromotionRowImplicits.pDiscountActive.get(promotionRow)
+ }
+
+ object PromotionRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[PromotionRow], field)
+ .buildChecked[T]()
+
+ lazy val pPromoSk = invoke[Long]("pPromoSk")
+ lazy val pPromoId = invoke[String]("pPromoId")
+ lazy val pStartDateId = invoke[Long]("pStartDateId")
+ lazy val pEndDateId = invoke[Long]("pEndDateId")
+ lazy val pItemSk = invoke[Long]("pItemSk")
+ lazy val pCost = invoke[TPCDSDecimal]("pCost")
+ lazy val pResponseTarget = invoke[Int]("pResponseTarget")
+ lazy val pPromoName = invoke[String]("pPromoName")
+ lazy val pChannelDmail = invoke[Boolean]("pChannelDmail")
+ lazy val pChannelEmail = invoke[Boolean]("pChannelEmail")
+ lazy val pChannelCatalog = invoke[Boolean]("pChannelCatalog")
+ lazy val pChannelTv = invoke[Boolean]("pChannelTv")
+ lazy val pChannelRadio = invoke[Boolean]("pChannelRadio")
+ lazy val pChannelPress = invoke[Boolean]("pChannelPress")
+ lazy val pChannelEvent = invoke[Boolean]("pChannelEvent")
+ lazy val pChannelDemo = invoke[Boolean]("pChannelDemo")
+ lazy val pChannelDetails = invoke[String]("pChannelDetails")
+ lazy val pPurpose = invoke[String]("pPurpose")
+ lazy val pDiscountActive = invoke[Boolean]("pDiscountActive")
+
+ def values(row: PromotionRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getPPromoSk, P_PROMO_SK),
+ getOrNull(row, row.getPPromoId, P_PROMO_ID),
+ getOrNullForKey(row, row.getPStartDateId, P_START_DATE_ID),
+ getOrNullForKey(row, row.getPEndDateId, P_END_DATE_ID),
+ getOrNullForKey(row, row.getPItemSk, P_ITEM_SK),
+ getOrNull(row, row.getPCost, P_COST),
+ getOrNull(row, row.getPResponseTarget, P_RESPONSE_TARGET),
+ getOrNull(row, row.getPPromoName, P_PROMO_NAME),
+ getOrNullForBoolean(row, row.isPChannelDmail, P_CHANNEL_DMAIL),
+ getOrNullForBoolean(row, row.isPChannelEmail, P_CHANNEL_EMAIL),
+ getOrNullForBoolean(row, row.isPChannelCatalog, P_CHANNEL_CATALOG),
+ getOrNullForBoolean(row, row.isPChannelTv, P_CHANNEL_TV),
+ getOrNullForBoolean(row, row.isPChannelRadio, P_CHANNEL_RADIO),
+ getOrNullForBoolean(row, row.isPChannelPress, P_CHANNEL_PRESS),
+ getOrNullForBoolean(row, row.isPChannelEvent, P_CHANNEL_EVENT),
+ getOrNullForBoolean(row, row.isPChannelDemo, P_CHANNEL_DEMO),
+ getOrNull(row, row.getPChannelDetails, P_CHANNEL_DETAILS),
+ getOrNull(row, row.getPPurpose, P_PURPOSE),
+ getOrNullForBoolean(row, row.isPDiscountActive, P_DISCOUNT_ACTIVE))
+ }
+
+ implicit class CatalogPageRowImplicits(catalogPageRow: CatalogPageRow) {
+ def getCpCatalogPageSk: Long =
CatalogPageRowImplicits.cpCatalogPageSk.get(catalogPageRow)
+ def getCpCatalogPageId: String =
CatalogPageRowImplicits.cpCatalogPageId.get(catalogPageRow)
+ def getCpStartDateId: Long =
CatalogPageRowImplicits.cpStartDateId.get(catalogPageRow)
+ def getCpEndDateId: Long =
CatalogPageRowImplicits.cpEndDateId.get(catalogPageRow)
+ def getCpDepartment: String =
CatalogPageRowImplicits.cpDepartment.get(catalogPageRow)
+ def getCpCatalogNumber: Int =
CatalogPageRowImplicits.cpCatalogNumber.get(catalogPageRow)
+ def getCpCatalogPageNumber: Int =
+ CatalogPageRowImplicits.cpCatalogPageNumber.get(catalogPageRow)
+ def getCpDescription: String =
CatalogPageRowImplicits.cpDescription.get(catalogPageRow)
+ def getCpType: String = CatalogPageRowImplicits.cpType.get(catalogPageRow)
+ }
+
+ object CatalogPageRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[CatalogPageRow], field)
+ .buildChecked[T]()
+
+ lazy val cpCatalogPageSk = invoke[Long]("cpCatalogPageSk")
+ lazy val cpCatalogPageId = invoke[String]("cpCatalogPageId")
+ lazy val cpStartDateId = invoke[Long]("cpStartDateId")
+ lazy val cpEndDateId = invoke[Long]("cpEndDateId")
+ lazy val cpDepartment = invoke[String]("cpDepartment")
+ lazy val cpCatalogNumber = invoke[Int]("cpCatalogNumber")
+ lazy val cpCatalogPageNumber = invoke[Int]("cpCatalogPageNumber")
+ lazy val cpDescription = invoke[String]("cpDescription")
+ lazy val cpType = invoke[String]("cpType")
+
+ def values(row: CatalogPageRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getCpCatalogPageSk, CP_CATALOG_PAGE_SK),
+ getOrNull(row, row.getCpCatalogPageId, CP_CATALOG_PAGE_ID),
+ getOrNullForKey(row, row.getCpStartDateId, CP_START_DATE_ID),
+ getOrNullForKey(row, row.getCpEndDateId, CP_END_DATE_ID),
+ getOrNull(row, row.getCpDepartment, CP_DEPARTMENT),
+ getOrNull(row, row.getCpCatalogNumber, CP_CATALOG_NUMBER),
+ getOrNull(row, row.getCpCatalogPageNumber, CP_CATALOG_PAGE_NUMBER),
+ getOrNull(row, row.getCpDescription, CP_DESCRIPTION),
+ getOrNull(row, row.getCpType, CP_TYPE))
+ }
+
+ implicit class WebSalesRowImplicits(webSalesRow: WebSalesRow) {
+ def getWsSoldDateSk: Long =
WebSalesRowImplicits.wsSoldDateSk.get(webSalesRow)
+ def getWsSoldTimeSk: Long =
WebSalesRowImplicits.wsSoldTimeSk.get(webSalesRow)
+ def getWsShipDateSk: Long =
WebSalesRowImplicits.wsShipDateSk.get(webSalesRow)
+ def getWsItemSk: Long = WebSalesRowImplicits.wsItemSk.get(webSalesRow)
+ def getWsBillCustomerSk: Long =
WebSalesRowImplicits.wsBillCustomerSk.get(webSalesRow)
+ def getWsBillCdemoSk: Long =
WebSalesRowImplicits.wsBillCdemoSk.get(webSalesRow)
+ def getWsBillHdemoSk: Long =
WebSalesRowImplicits.wsBillHdemoSk.get(webSalesRow)
+ def getWsBillAddrSk: Long =
WebSalesRowImplicits.wsBillAddrSk.get(webSalesRow)
+ def getWsShipCustomerSk: Long =
WebSalesRowImplicits.wsShipCustomerSk.get(webSalesRow)
+ def getWsShipCdemoSk: Long =
WebSalesRowImplicits.wsShipCdemoSk.get(webSalesRow)
+ def getWsShipHdemoSk: Long =
WebSalesRowImplicits.wsShipHdemoSk.get(webSalesRow)
+ def getWsShipAddrSk: Long =
WebSalesRowImplicits.wsShipAddrSk.get(webSalesRow)
+ def getWsWebPageSk: Long =
WebSalesRowImplicits.wsWebPageSk.get(webSalesRow)
+ def getWsWebSiteSk: Long =
WebSalesRowImplicits.wsWebSiteSk.get(webSalesRow)
+ def getWsShipModeSk: Long =
WebSalesRowImplicits.wsShipModeSk.get(webSalesRow)
+ def getWsWarehouseSk: Long =
WebSalesRowImplicits.wsWarehouseSk.get(webSalesRow)
+ def getWsPromoSk: Long = WebSalesRowImplicits.wsPromoSk.get(webSalesRow)
+ def getWsOrderNumber: Long =
WebSalesRowImplicits.wsOrderNumber.get(webSalesRow)
+ def getWsPricing: Pricing = WebSalesRowImplicits.wsPricing.get(webSalesRow)
+ }
+
+ object WebSalesRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[WebSalesRow], field)
+ .buildChecked[T]()
+
+ lazy val wsSoldDateSk = invoke[Long]("wsSoldDateSk")
+ lazy val wsSoldTimeSk = invoke[Long]("wsSoldTimeSk")
+ lazy val wsShipDateSk = invoke[Long]("wsShipDateSk")
+ lazy val wsItemSk = invoke[Long]("wsItemSk")
+ lazy val wsBillCustomerSk = invoke[Long]("wsBillCustomerSk")
+ lazy val wsBillCdemoSk = invoke[Long]("wsBillCdemoSk")
+ lazy val wsBillHdemoSk = invoke[Long]("wsBillHdemoSk")
+ lazy val wsBillAddrSk = invoke[Long]("wsBillAddrSk")
+ lazy val wsShipCustomerSk = invoke[Long]("wsShipCustomerSk")
+ lazy val wsShipCdemoSk = invoke[Long]("wsShipCdemoSk")
+ lazy val wsShipHdemoSk = invoke[Long]("wsShipHdemoSk")
+ lazy val wsShipAddrSk = invoke[Long]("wsShipAddrSk")
+ lazy val wsWebPageSk = invoke[Long]("wsWebPageSk")
+ lazy val wsWebSiteSk = invoke[Long]("wsWebSiteSk")
+ lazy val wsShipModeSk = invoke[Long]("wsShipModeSk")
+ lazy val wsWarehouseSk = invoke[Long]("wsWarehouseSk")
+ lazy val wsPromoSk = invoke[Long]("wsPromoSk")
+ lazy val wsOrderNumber = invoke[Long]("wsOrderNumber")
+ lazy val wsPricing = invoke[Pricing]("wsPricing")
+
+ def values(row: WebSalesRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getWsSoldDateSk, WS_SOLD_DATE_SK),
+ getOrNullForKey(row, row.getWsSoldTimeSk, WS_SOLD_TIME_SK),
+ getOrNullForKey(row, row.getWsShipDateSk, WS_SHIP_DATE_SK),
+ getOrNullForKey(row, row.getWsItemSk, WS_ITEM_SK),
+ getOrNullForKey(row, row.getWsBillCustomerSk, WS_BILL_CUSTOMER_SK),
+ getOrNullForKey(row, row.getWsBillCdemoSk, WS_BILL_CDEMO_SK),
+ getOrNullForKey(row, row.getWsBillHdemoSk, WS_BILL_HDEMO_SK),
+ getOrNullForKey(row, row.getWsBillAddrSk, WS_BILL_ADDR_SK),
+ getOrNullForKey(row, row.getWsShipCustomerSk, WS_SHIP_CUSTOMER_SK),
+ getOrNullForKey(row, row.getWsShipCdemoSk, WS_SHIP_CDEMO_SK),
+ getOrNullForKey(row, row.getWsShipHdemoSk, WS_SHIP_HDEMO_SK),
+ getOrNullForKey(row, row.getWsShipAddrSk, WS_SHIP_ADDR_SK),
+ getOrNullForKey(row, row.getWsWebPageSk, WS_WEB_PAGE_SK),
+ getOrNullForKey(row, row.getWsWebSiteSk, WS_WEB_SITE_SK),
+ getOrNullForKey(row, row.getWsShipModeSk, WS_SHIP_MODE_SK),
+ getOrNullForKey(row, row.getWsWarehouseSk, WS_WAREHOUSE_SK),
+ getOrNullForKey(row, row.getWsPromoSk, WS_PROMO_SK),
+ getOrNullForKey(row, row.getWsOrderNumber, WS_ORDER_NUMBER),
+ getOrNull(row, row.getWsPricing.getQuantity(), WS_PRICING_QUANTITY),
+ getOrNull(row, row.getWsPricing.getWholesaleCost(),
WS_PRICING_WHOLESALE_COST),
+ getOrNull(row, row.getWsPricing.getListPrice(), WS_PRICING_LIST_PRICE),
+ getOrNull(row, row.getWsPricing.getSalesPrice(), WS_PRICING_SALES_PRICE),
+ getOrNull(row, row.getWsPricing.getExtDiscountAmount(),
WS_PRICING_EXT_DISCOUNT_AMT),
+ getOrNull(row, row.getWsPricing.getExtSalesPrice(),
WS_PRICING_EXT_SALES_PRICE),
+ getOrNull(row, row.getWsPricing.getExtWholesaleCost(),
WS_PRICING_EXT_WHOLESALE_COST),
+ getOrNull(row, row.getWsPricing.getExtListPrice(),
WS_PRICING_EXT_LIST_PRICE),
+ getOrNull(row, row.getWsPricing.getExtTax(), WS_PRICING_EXT_TAX),
+ getOrNull(row, row.getWsPricing.getCouponAmount(),
WS_PRICING_COUPON_AMT),
+ getOrNull(row, row.getWsPricing.getExtShipCost(),
WS_PRICING_EXT_SHIP_COST),
+ getOrNull(row, row.getWsPricing.getNetPaid(), WS_PRICING_NET_PAID),
+ getOrNull(row, row.getWsPricing.getNetPaidIncludingTax(),
WS_PRICING_NET_PAID_INC_TAX),
+ getOrNull(row, row.getWsPricing.getNetPaidIncludingShipping(),
WS_PRICING_NET_PAID_INC_SHIP),
+ getOrNull(
+ row,
+ row.getWsPricing.getNetPaidIncludingShippingAndTax(),
+ WS_PRICING_NET_PAID_INC_SHIP_TAX),
+ getOrNull(row, row.getWsPricing.getNetProfit(), WS_PRICING_NET_PROFIT))
+ }
+
+ implicit class StoreSalesRowImplicits(storeSalesRow: StoreSalesRow) {
+ def getSsSoldDateSk: Long =
StoreSalesRowImplicits.ssSoldDateSk.get(storeSalesRow)
+ def getSsSoldTimeSk: Long =
StoreSalesRowImplicits.ssSoldTimeSk.get(storeSalesRow)
+ def getSsSoldItemSk: Long =
StoreSalesRowImplicits.ssSoldItemSk.get(storeSalesRow)
+ def getSsSoldCustomerSk: Long =
StoreSalesRowImplicits.ssSoldCustomerSk.get(storeSalesRow)
+ def getSsSoldCdemoSk: Long =
StoreSalesRowImplicits.ssSoldCdemoSk.get(storeSalesRow)
+ def getSsSoldHdemoSk: Long =
StoreSalesRowImplicits.ssSoldHdemoSk.get(storeSalesRow)
+ def getSsSoldAddrSk: Long =
StoreSalesRowImplicits.ssSoldAddrSk.get(storeSalesRow)
+ def getSsSoldStoreSk: Long =
StoreSalesRowImplicits.ssSoldStoreSk.get(storeSalesRow)
+ def getSsSoldPromoSk: Long =
StoreSalesRowImplicits.ssSoldPromoSk.get(storeSalesRow)
+ def getSsTicketNumber: Long =
StoreSalesRowImplicits.ssTicketNumber.get(storeSalesRow)
+ def getSsPricing: Pricing =
StoreSalesRowImplicits.ssPricing.get(storeSalesRow)
+ }
+
+ object StoreSalesRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[StoreSalesRow], field)
+ .buildChecked[T]()
+
+ lazy val ssSoldDateSk = invoke[Long]("ssSoldDateSk")
+ lazy val ssSoldTimeSk = invoke[Long]("ssSoldTimeSk")
+ lazy val ssSoldItemSk = invoke[Long]("ssSoldItemSk")
+ lazy val ssSoldCustomerSk = invoke[Long]("ssSoldCustomerSk")
+ lazy val ssSoldCdemoSk = invoke[Long]("ssSoldCdemoSk")
+ lazy val ssSoldHdemoSk = invoke[Long]("ssSoldHdemoSk")
+ lazy val ssSoldAddrSk = invoke[Long]("ssSoldAddrSk")
+ lazy val ssSoldStoreSk = invoke[Long]("ssSoldStoreSk")
+ lazy val ssSoldPromoSk = invoke[Long]("ssSoldPromoSk")
+ lazy val ssTicketNumber = invoke[Long]("ssTicketNumber")
+ lazy val ssPricing = invoke[Pricing]("ssPricing")
+
+ def values(row: StoreSalesRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getSsSoldDateSk, SS_SOLD_DATE_SK),
+ getOrNullForKey(row, row.getSsSoldTimeSk, SS_SOLD_TIME_SK),
+ getOrNullForKey(row, row.getSsSoldItemSk, SS_SOLD_ITEM_SK),
+ getOrNullForKey(row, row.getSsSoldCustomerSk, SS_SOLD_CUSTOMER_SK),
+ getOrNullForKey(row, row.getSsSoldCdemoSk, SS_SOLD_CDEMO_SK),
+ getOrNullForKey(row, row.getSsSoldHdemoSk, SS_SOLD_HDEMO_SK),
+ getOrNullForKey(row, row.getSsSoldAddrSk, SS_SOLD_ADDR_SK),
+ getOrNullForKey(row, row.getSsSoldStoreSk, SS_SOLD_STORE_SK),
+ getOrNullForKey(row, row.getSsSoldPromoSk, SS_SOLD_PROMO_SK),
+ getOrNullForKey(row, row.getSsTicketNumber, SS_TICKET_NUMBER),
+ getOrNull(row, row.getSsPricing.getQuantity(), SS_PRICING_QUANTITY),
+ getOrNull(row, row.getSsPricing.getWholesaleCost(),
SS_PRICING_WHOLESALE_COST),
+ getOrNull(row, row.getSsPricing.getListPrice(), SS_PRICING_LIST_PRICE),
+ getOrNull(row, row.getSsPricing.getSalesPrice(), SS_PRICING_SALES_PRICE),
+ getOrNull(row, row.getSsPricing.getCouponAmount(),
SS_PRICING_COUPON_AMT),
+ getOrNull(row, row.getSsPricing.getExtSalesPrice(),
SS_PRICING_EXT_SALES_PRICE),
+ getOrNull(row, row.getSsPricing.getExtWholesaleCost(),
SS_PRICING_EXT_WHOLESALE_COST),
+ getOrNull(row, row.getSsPricing.getExtListPrice(),
SS_PRICING_EXT_LIST_PRICE),
+ getOrNull(row, row.getSsPricing.getExtTax(), SS_PRICING_EXT_TAX),
+ getOrNull(row, row.getSsPricing.getCouponAmount(),
SS_PRICING_COUPON_AMT),
+ getOrNull(row, row.getSsPricing.getNetPaid(), SS_PRICING_NET_PAID),
+ getOrNull(row, row.getSsPricing.getNetPaidIncludingTax(),
SS_PRICING_NET_PAID_INC_TAX),
+ getOrNull(row, row.getSsPricing.getNetProfit(), SS_PRICING_NET_PROFIT))
+ }
+
+ implicit class InventoryRowImplicits(inventoryRow: InventoryRow) {
+ def getInvDateSk: Long = InventoryRowImplicits.invDateSk.get(inventoryRow)
+ def getInvItemSk: Long = InventoryRowImplicits.invItemSk.get(inventoryRow)
+ def getInvWarehouseSk: Long =
InventoryRowImplicits.invWarehouseSk.get(inventoryRow)
+ def getInvQuantityOnHand: Int =
InventoryRowImplicits.invQuantityOnHand.get(inventoryRow)
+ }
+
+ object InventoryRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[InventoryRow], field)
+ .buildChecked[T]()
+
+ lazy val invDateSk = invoke[Long]("invDateSk")
+ lazy val invItemSk = invoke[Long]("invItemSk")
+ lazy val invWarehouseSk = invoke[Long]("invWarehouseSk")
+ lazy val invQuantityOnHand = invoke[Int]("invQuantityOnHand")
+
+ def values(row: InventoryRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getInvDateSk, INV_DATE_SK),
+ getOrNullForKey(row, row.getInvItemSk, INV_ITEM_SK),
+ getOrNullForKey(row, row.getInvWarehouseSk, INV_WAREHOUSE_SK),
+ getOrNull(row, row.getInvQuantityOnHand, INV_QUANTITY_ON_HAND))
+ }
+
+ implicit class WebReturnsRowImplicits(webReturnsRow: WebReturnsRow) {
+ def getWrReturnedDateSk: Long =
WebReturnsRowImplicits.wrReturnedDateSk.get(webReturnsRow)
+ def getWrReturnedTimeSk: Long =
WebReturnsRowImplicits.wrReturnedTimeSk.get(webReturnsRow)
+ def getWrItemSk: Long = WebReturnsRowImplicits.wrItemSk.get(webReturnsRow)
+ def getWrRefundedCustomerSk: Long =
+ WebReturnsRowImplicits.wrRefundedCustomerSk.get(webReturnsRow)
+ def getWrRefundedCdemoSk: Long =
WebReturnsRowImplicits.wrRefundedCdemoSk.get(webReturnsRow)
+ def getWrRefundedHdemoSk: Long =
WebReturnsRowImplicits.wrRefundedHdemoSk.get(webReturnsRow)
+ def getWrRefundedAddrSk: Long =
WebReturnsRowImplicits.wrRefundedAddrSk.get(webReturnsRow)
+ def getWrReturningCustomerSk: Long =
+ WebReturnsRowImplicits.wrReturningCustomerSk.get(webReturnsRow)
+ def getWrReturningCdemoSk: Long =
WebReturnsRowImplicits.wrReturningCdemoSk.get(webReturnsRow)
+ def getWrReturningHdemoSk: Long =
WebReturnsRowImplicits.wrReturningHdemoSk.get(webReturnsRow)
+ def getWrReturningAddrSk: Long =
WebReturnsRowImplicits.wrReturningAddrSk.get(webReturnsRow)
+ def getWrWebPageSk: Long =
WebReturnsRowImplicits.wrWebPageSk.get(webReturnsRow)
+ def getWrReasonSk: Long =
WebReturnsRowImplicits.wrReasonSk.get(webReturnsRow)
+ def getWrOrderNumber: Long =
WebReturnsRowImplicits.wrOrderNumber.get(webReturnsRow)
+ def getWrPricing: Pricing =
WebReturnsRowImplicits.wrPricing.get(webReturnsRow)
+ }
+
+ object WebReturnsRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[WebReturnsRow], field)
+ .buildChecked[T]()
+
+ lazy val wrReturnedDateSk = invoke[Long]("wrReturnedDateSk")
+ lazy val wrReturnedTimeSk = invoke[Long]("wrReturnedTimeSk")
+ lazy val wrItemSk = invoke[Long]("wrItemSk")
+ lazy val wrRefundedCustomerSk = invoke[Long]("wrRefundedCustomerSk")
+ lazy val wrRefundedCdemoSk = invoke[Long]("wrRefundedCdemoSk")
+ lazy val wrRefundedHdemoSk = invoke[Long]("wrRefundedHdemoSk")
+ lazy val wrRefundedAddrSk = invoke[Long]("wrRefundedAddrSk")
+ lazy val wrReturningCustomerSk = invoke[Long]("wrReturningCustomerSk")
+ lazy val wrReturningCdemoSk = invoke[Long]("wrReturningCdemoSk")
+ lazy val wrReturningHdemoSk = invoke[Long]("wrReturningHdemoSk")
+ lazy val wrReturningAddrSk = invoke[Long]("wrReturningAddrSk")
+ lazy val wrWebPageSk = invoke[Long]("wrWebPageSk")
+ lazy val wrReasonSk = invoke[Long]("wrReasonSk")
+ lazy val wrOrderNumber = invoke[Long]("wrOrderNumber")
+ lazy val wrPricing = invoke[Pricing]("wrPricing")
+
+ def values(row: WebReturnsRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getWrReturnedDateSk, WR_RETURNED_DATE_SK),
+ getOrNullForKey(row, row.getWrReturnedTimeSk, WR_RETURNED_TIME_SK),
+ getOrNullForKey(row, row.getWrItemSk, WR_ITEM_SK),
+ getOrNullForKey(row, row.getWrRefundedCustomerSk,
WR_REFUNDED_CUSTOMER_SK),
+ getOrNullForKey(row, row.getWrRefundedCdemoSk, WR_REFUNDED_CDEMO_SK),
+ getOrNullForKey(row, row.getWrRefundedHdemoSk, WR_REFUNDED_HDEMO_SK),
+ getOrNullForKey(row, row.getWrRefundedAddrSk, WR_REFUNDED_ADDR_SK),
+ getOrNullForKey(row, row.getWrReturningCustomerSk,
WR_RETURNING_CUSTOMER_SK),
+ getOrNullForKey(row, row.getWrReturningCdemoSk, WR_RETURNING_CDEMO_SK),
+ getOrNullForKey(row, row.getWrReturningHdemoSk, WR_RETURNING_HDEMO_SK),
+ getOrNullForKey(row, row.getWrReturningAddrSk, WR_RETURNING_ADDR_SK),
+ getOrNullForKey(row, row.getWrWebPageSk, WR_WEB_PAGE_SK),
+ getOrNullForKey(row, row.getWrReasonSk, WR_REASON_SK),
+ getOrNullForKey(row, row.getWrOrderNumber, WR_ORDER_NUMBER),
+ getOrNull(row, row.getWrPricing.getQuantity(), WR_PRICING_QUANTITY),
+ getOrNull(row, row.getWrPricing.getNetPaid(), WR_PRICING_NET_PAID),
+ getOrNull(row, row.getWrPricing.getExtTax(), WR_PRICING_EXT_TAX),
+ getOrNull(row, row.getWrPricing.getNetPaidIncludingTax(),
WR_PRICING_NET_PAID_INC_TAX),
+ getOrNull(row, row.getWrPricing.getFee(), WR_PRICING_FEE),
+ getOrNull(row, row.getWrPricing.getExtShipCost(),
WR_PRICING_EXT_SHIP_COST),
+ getOrNull(row, row.getWrPricing.getRefundedCash(),
WR_PRICING_REFUNDED_CASH),
+ getOrNull(row, row.getWrPricing.getReversedCharge(),
WR_PRICING_REVERSED_CHARGE),
+ getOrNull(row, row.getWrPricing.getStoreCredit(),
WR_PRICING_STORE_CREDIT),
+ getOrNull(row, row.getWrPricing.getNetLoss(), WR_PRICING_NET_LOSS))
+ }
+
+ implicit class WarehouseRowImplicits(warehouseRow: WarehouseRow) {
+ def getWWarehouseSk: Long =
WarehouseRowImplicits.wWarehouseSk.get(warehouseRow)
+ def getWWarehouseId: String =
WarehouseRowImplicits.wWarehouseId.get(warehouseRow)
+ def getWWarehouseName: String =
WarehouseRowImplicits.wWarehouseName.get(warehouseRow)
+ def getWWarehouseSqFt: Int =
WarehouseRowImplicits.wWarehouseSqFt.get(warehouseRow)
+ def getWAddress: Address = WarehouseRowImplicits.wAddress.get(warehouseRow)
+ }
+
+ object WarehouseRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[WarehouseRow], field)
+ .buildChecked[T]()
+
+ lazy val wWarehouseSk = invoke[Long]("wWarehouseSk")
+ lazy val wWarehouseId = invoke[String]("wWarehouseId")
+ lazy val wWarehouseName = invoke[String]("wWarehouseName")
+ lazy val wWarehouseSqFt = invoke[Int]("wWarehouseSqFt")
+ lazy val wAddress = invoke[Address]("wAddress")
+
+ def values(row: WarehouseRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getWWarehouseSk, W_WAREHOUSE_SK),
+ getOrNull(row, row.getWWarehouseId, W_WAREHOUSE_ID),
+ getOrNull(row, row.getWWarehouseName, W_WAREHOUSE_NAME),
+ getOrNull(row, row.getWWarehouseSqFt, W_WAREHOUSE_SQ_FT),
+ getOrNull(row, row.getWAddress.getStreetNumber(), W_ADDRESS_STREET_NUM),
+ getOrNull(row, row.getWAddress.getStreetName(), W_ADDRESS_STREET_NAME1),
+ getOrNull(row, row.getWAddress.getStreetType(), W_ADDRESS_STREET_TYPE),
+ getOrNull(row, row.getWAddress.getSuiteNumber(), W_ADDRESS_SUITE_NUM),
+ getOrNull(row, row.getWAddress.getCity(), W_ADDRESS_CITY),
+ getOrNull(row, row.getWAddress.getCounty(), W_ADDRESS_COUNTY),
+ getOrNull(row, row.getWAddress.getState(), W_ADDRESS_STATE),
+ getOrNull(
+ row,
+ java.lang.String.format("%05d",
row.getWAddress.getZip.asInstanceOf[Object]),
+ W_ADDRESS_ZIP),
+ getOrNull(row, row.getWAddress.getCountry(), W_ADDRESS_COUNTRY),
+ getOrNull(row, row.getWAddress.getGmtOffset(), W_ADDRESS_GMT_OFFSET))
+ }
+
+ implicit class CustomerRowImplicits(customerRow: CustomerRow) {
+ def getCCustomerSk: Long =
CustomerRowImplicits.cCustomerSk.get(customerRow)
+ def getCCustomerId: String =
CustomerRowImplicits.cCustomerId.get(customerRow)
+ def getCCurrentCdemoSk: Long =
CustomerRowImplicits.cCurrentCdemoSk.get(customerRow)
+ def getCCurrentHdemoSk: Long =
CustomerRowImplicits.cCurrentHdemoSk.get(customerRow)
+ def getCCurrentAddrSk: Long =
CustomerRowImplicits.cCurrentAddrSk.get(customerRow)
+ def getCFirstShiptoDateId: Int =
CustomerRowImplicits.cFirstShiptoDateId.get(customerRow)
+ def getCFirstSalesDateId: Int =
CustomerRowImplicits.cFirstSalesDateId.get(customerRow)
+ def getCSalutation: String =
CustomerRowImplicits.cSalutation.get(customerRow)
+ def getCFirstName: String =
CustomerRowImplicits.cFirstName.get(customerRow)
+ def getCLastName: String = CustomerRowImplicits.cLastName.get(customerRow)
+ def isCPreferredCustFlag: Boolean =
CustomerRowImplicits.cPreferredCustFlag.get(customerRow)
+ def getCBirthDay: Int = CustomerRowImplicits.cBirthDay.get(customerRow)
+ def getCBirthMonth: Int = CustomerRowImplicits.cBirthMonth.get(customerRow)
+ def getCBirthYear: Int = CustomerRowImplicits.cBirthYear.get(customerRow)
+ def getCBirthCountry: String =
CustomerRowImplicits.cBirthCountry.get(customerRow)
+ def getCLogin: String = CustomerRowImplicits.cLogin.get(customerRow)
+ def getCEmailAddress: String =
CustomerRowImplicits.cEmailAddress.get(customerRow)
+ def getCLastReviewDate: Int =
CustomerRowImplicits.cLastReviewDate.get(customerRow)
+ }
+
+ object CustomerRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[CustomerRow], field)
+ .buildChecked[T]()
+
+ lazy val cCustomerSk = invoke[Long]("cCustomerSk")
+ lazy val cCustomerId = invoke[String]("cCustomerId")
+ lazy val cCurrentCdemoSk = invoke[Long]("cCurrentCdemoSk")
+ lazy val cCurrentHdemoSk = invoke[Long]("cCurrentHdemoSk")
+ lazy val cCurrentAddrSk = invoke[Long]("cCurrentAddrSk")
+ lazy val cFirstShiptoDateId = invoke[Int]("cFirstShiptoDateId")
+ lazy val cFirstSalesDateId = invoke[Int]("cFirstSalesDateId")
+ lazy val cSalutation = invoke[String]("cSalutation")
+ lazy val cFirstName = invoke[String]("cFirstName")
+ lazy val cLastName = invoke[String]("cLastName")
+ lazy val cPreferredCustFlag = invoke[Boolean]("cPreferredCustFlag")
+ lazy val cBirthDay = invoke[Int]("cBirthDay")
+ lazy val cBirthMonth = invoke[Int]("cBirthMonth")
+ lazy val cBirthYear = invoke[Int]("cBirthYear")
+ lazy val cBirthCountry = invoke[String]("cBirthCountry")
+ lazy val cLogin = invoke[String]("cLogin")
+ lazy val cEmailAddress = invoke[String]("cEmailAddress")
+ lazy val cLastReviewDate = invoke[Int]("cLastReviewDate")
+
+ def values(row: CustomerRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getCCustomerSk, C_CUSTOMER_SK),
+ getOrNull(row, row.getCCustomerId, C_CUSTOMER_ID),
+ getOrNullForKey(row, row.getCCurrentCdemoSk, C_CURRENT_CDEMO_SK),
+ getOrNullForKey(row, row.getCCurrentHdemoSk, C_CURRENT_HDEMO_SK),
+ getOrNullForKey(row, row.getCCurrentAddrSk, C_CURRENT_ADDR_SK),
+ getOrNull(row, row.getCFirstShiptoDateId, C_FIRST_SHIPTO_DATE_ID),
+ getOrNull(row, row.getCFirstSalesDateId, C_FIRST_SALES_DATE_ID),
+ getOrNull(row, row.getCSalutation, C_SALUTATION),
+ getOrNull(row, row.getCFirstName, C_FIRST_NAME),
+ getOrNull(row, row.getCLastName, C_LAST_NAME),
+ getOrNullForBoolean(row, row.isCPreferredCustFlag,
C_PREFERRED_CUST_FLAG),
+ getOrNull(row, row.getCBirthDay, C_BIRTH_DAY),
+ getOrNull(row, row.getCBirthMonth, C_BIRTH_MONTH),
+ getOrNull(row, row.getCBirthYear, C_BIRTH_YEAR),
+ getOrNull(row, row.getCBirthCountry, C_BIRTH_COUNTRY),
+ row.getCLogin,
+ getOrNull(row, row.getCEmailAddress, C_EMAIL_ADDRESS),
+ getOrNull(row, row.getCLastReviewDate, C_LAST_REVIEW_DATE))
+ }
+
+ implicit class StoreReturnsRowImplicits(storeReturnsRow: StoreReturnsRow) {
+ def getSrReturnedDateSk: Long =
StoreReturnsRowImplicits.srReturnedDateSk.get(storeReturnsRow)
+ def getSrReturnedTimeSk: Long =
StoreReturnsRowImplicits.srReturnedTimeSk.get(storeReturnsRow)
+ def getSrItemSk: Long =
StoreReturnsRowImplicits.srItemSk.get(storeReturnsRow)
+ def getSrCustomerSk: Long =
StoreReturnsRowImplicits.srCustomerSk.get(storeReturnsRow)
+ def getSrCdemoSk: Long =
StoreReturnsRowImplicits.srCdemoSk.get(storeReturnsRow)
+ def getSrHdemoSk: Long =
StoreReturnsRowImplicits.srHdemoSk.get(storeReturnsRow)
+ def getSrAddrSk: Long =
StoreReturnsRowImplicits.srAddrSk.get(storeReturnsRow)
+ def getSrStoreSk: Long =
StoreReturnsRowImplicits.srStoreSk.get(storeReturnsRow)
+ def getSrReasonSk: Long =
StoreReturnsRowImplicits.srReasonSk.get(storeReturnsRow)
+ def getSrTicketNumber: Long =
StoreReturnsRowImplicits.srTicketNumber.get(storeReturnsRow)
+ def getSrPricing: Pricing =
StoreReturnsRowImplicits.srPricing.get(storeReturnsRow)
+ }
+
+ object StoreReturnsRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[StoreReturnsRow], field)
+ .buildChecked[T]()
+
+ lazy val srReturnedDateSk = invoke[Long]("srReturnedDateSk")
+ lazy val srReturnedTimeSk = invoke[Long]("srReturnedTimeSk")
+ lazy val srItemSk = invoke[Long]("srItemSk")
+ lazy val srCustomerSk = invoke[Long]("srCustomerSk")
+ lazy val srCdemoSk = invoke[Long]("srCdemoSk")
+ lazy val srHdemoSk = invoke[Long]("srHdemoSk")
+ lazy val srAddrSk = invoke[Long]("srAddrSk")
+ lazy val srStoreSk = invoke[Long]("srStoreSk")
+ lazy val srReasonSk = invoke[Long]("srReasonSk")
+ lazy val srTicketNumber = invoke[Long]("srTicketNumber")
+ lazy val srPricing = invoke[Pricing]("srPricing")
+
+ def values(row: StoreReturnsRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getSrReturnedDateSk, SR_RETURNED_DATE_SK),
+ getOrNullForKey(row, row.getSrReturnedTimeSk, SR_RETURNED_TIME_SK),
+ getOrNullForKey(row, row.getSrItemSk, SR_ITEM_SK),
+ getOrNullForKey(row, row.getSrCustomerSk, SR_CUSTOMER_SK),
+ getOrNullForKey(row, row.getSrCdemoSk, SR_CDEMO_SK),
+ getOrNullForKey(row, row.getSrHdemoSk, SR_HDEMO_SK),
+ getOrNullForKey(row, row.getSrAddrSk, SR_ADDR_SK),
+ getOrNullForKey(row, row.getSrStoreSk, SR_STORE_SK),
+ getOrNullForKey(row, row.getSrReasonSk, SR_REASON_SK),
+ getOrNullForKey(row, row.getSrTicketNumber, SR_TICKET_NUMBER),
+ getOrNull(row, row.getSrPricing.getQuantity(), SR_PRICING_QUANTITY),
+ getOrNull(row, row.getSrPricing.getNetPaid(), SR_PRICING_NET_PAID),
+ getOrNull(row, row.getSrPricing.getExtTax(), SR_PRICING_EXT_TAX),
+ getOrNull(row, row.getSrPricing.getNetPaidIncludingTax(),
SR_PRICING_NET_PAID_INC_TAX),
+ getOrNull(row, row.getSrPricing.getFee(), SR_PRICING_FEE),
+ getOrNull(row, row.getSrPricing.getExtShipCost(),
SR_PRICING_EXT_SHIP_COST),
+ getOrNull(row, row.getSrPricing.getRefundedCash(),
SR_PRICING_REFUNDED_CASH),
+ getOrNull(row, row.getSrPricing.getReversedCharge(),
SR_PRICING_REVERSED_CHARGE),
+ getOrNull(row, row.getSrPricing.getStoreCredit(),
SR_PRICING_STORE_CREDIT),
+ getOrNull(row, row.getSrPricing.getNetLoss(), SR_PRICING_NET_LOSS))
+ }
+
+ implicit class CatalogReturnsRowImplicits(catalogReturnsRow:
CatalogReturnsRow) {
+ def getCrReturnedDateSk: Long =
+ CatalogReturnsRowImplicits.crReturnedDateSk.get(catalogReturnsRow)
+ def getCrReturnedTimeSk: Long =
+ CatalogReturnsRowImplicits.crReturnedTimeSk.get(catalogReturnsRow)
+ def getCrItemSk: Long =
CatalogReturnsRowImplicits.crItemSk.get(catalogReturnsRow)
+ def getCrRefundedCustomerSk: Long =
+ CatalogReturnsRowImplicits.crRefundedCustomerSk.get(catalogReturnsRow)
+ def getCrRefundedCdemoSk: Long =
+ CatalogReturnsRowImplicits.crRefundedCdemoSk.get(catalogReturnsRow)
+ def getCrRefundedHdemoSk: Long =
+ CatalogReturnsRowImplicits.crRefundedHdemoSk.get(catalogReturnsRow)
+ def getCrRefundedAddrSk: Long =
+ CatalogReturnsRowImplicits.crRefundedAddrSk.get(catalogReturnsRow)
+ def getCrReturningCustomerSk: Long =
+ CatalogReturnsRowImplicits.crReturningCustomerSk.get(catalogReturnsRow)
+ def getCrReturningCdemoSk: Long =
+ CatalogReturnsRowImplicits.crReturningCdemoSk.get(catalogReturnsRow)
+ def getCrReturningHdemoSk: Long =
+ CatalogReturnsRowImplicits.crReturningHdemoSk.get(catalogReturnsRow)
+ def getCrReturningAddrSk: Long =
+ CatalogReturnsRowImplicits.crReturningAddrSk.get(catalogReturnsRow)
+ def getCrCallCenterSk: Long =
CatalogReturnsRowImplicits.crCallCenterSk.get(catalogReturnsRow)
+ def getCrCatalogPageSk: Long =
CatalogReturnsRowImplicits.crCatalogPageSk.get(catalogReturnsRow)
+ def getCrShipModeSk: Long =
CatalogReturnsRowImplicits.crShipModeSk.get(catalogReturnsRow)
+ def getCrWarehouseSk: Long =
CatalogReturnsRowImplicits.crWarehouseSk.get(catalogReturnsRow)
+ def getCrReasonSk: Long =
CatalogReturnsRowImplicits.crReasonSk.get(catalogReturnsRow)
+ def getCrOrderNumber: Long =
CatalogReturnsRowImplicits.crOrderNumber.get(catalogReturnsRow)
+ def getCrPricing: Pricing =
CatalogReturnsRowImplicits.crPricing.get(catalogReturnsRow)
+ }
+
+ object CatalogReturnsRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[CatalogReturnsRow], field)
+ .buildChecked[T]()
+
+ lazy val crReturnedDateSk = invoke[Long]("crReturnedDateSk")
+ lazy val crReturnedTimeSk = invoke[Long]("crReturnedTimeSk")
+ lazy val crItemSk = invoke[Long]("crItemSk")
+ lazy val crRefundedCustomerSk = invoke[Long]("crRefundedCustomerSk")
+ lazy val crRefundedCdemoSk = invoke[Long]("crRefundedCdemoSk")
+ lazy val crRefundedHdemoSk = invoke[Long]("crRefundedHdemoSk")
+ lazy val crRefundedAddrSk = invoke[Long]("crRefundedAddrSk")
+ lazy val crReturningCustomerSk = invoke[Long]("crReturningCustomerSk")
+ lazy val crReturningCdemoSk = invoke[Long]("crReturningCdemoSk")
+ lazy val crReturningHdemoSk = invoke[Long]("crReturningHdemoSk")
+ lazy val crReturningAddrSk = invoke[Long]("crReturningAddrSk")
+ lazy val crCallCenterSk = invoke[Long]("crCallCenterSk")
+ lazy val crCatalogPageSk = invoke[Long]("crCatalogPageSk")
+ lazy val crShipModeSk = invoke[Long]("crShipModeSk")
+ lazy val crWarehouseSk = invoke[Long]("crWarehouseSk")
+ lazy val crReasonSk = invoke[Long]("crReasonSk")
+ lazy val crOrderNumber = invoke[Long]("crOrderNumber")
+ lazy val crPricing = invoke[Pricing]("crPricing")
+
+ def values(row: CatalogReturnsRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getCrReturnedDateSk, CR_RETURNED_DATE_SK),
+ getOrNullForKey(row, row.getCrReturnedTimeSk, CR_RETURNED_TIME_SK),
+ getOrNullForKey(row, row.getCrItemSk, CR_ITEM_SK),
+ getOrNullForKey(row, row.getCrRefundedCustomerSk,
CR_REFUNDED_CUSTOMER_SK),
+ getOrNullForKey(row, row.getCrRefundedCdemoSk, CR_REFUNDED_CDEMO_SK),
+ getOrNullForKey(row, row.getCrRefundedHdemoSk, CR_REFUNDED_HDEMO_SK),
+ getOrNullForKey(row, row.getCrRefundedAddrSk, CR_REFUNDED_ADDR_SK),
+ getOrNullForKey(row, row.getCrReturningCustomerSk,
CR_RETURNING_CUSTOMER_SK),
+ getOrNullForKey(row, row.getCrReturningCdemoSk, CR_RETURNING_CDEMO_SK),
+ getOrNullForKey(row, row.getCrReturningHdemoSk, CR_RETURNING_HDEMO_SK),
+ getOrNullForKey(row, row.getCrReturningAddrSk, CR_RETURNING_ADDR_SK),
+ getOrNullForKey(row, row.getCrCallCenterSk, CR_CALL_CENTER_SK),
+ getOrNullForKey(row, row.getCrCatalogPageSk, CR_CATALOG_PAGE_SK),
+ getOrNullForKey(row, row.getCrShipModeSk, CR_SHIP_MODE_SK),
+ getOrNullForKey(row, row.getCrWarehouseSk, CR_WAREHOUSE_SK),
+ getOrNullForKey(row, row.getCrReasonSk, CR_REASON_SK),
+ getOrNull(row, row.getCrOrderNumber, CR_ORDER_NUMBER),
+ getOrNull(row, row.getCrPricing.getQuantity(), CR_PRICING_QUANTITY),
+ getOrNull(row, row.getCrPricing.getNetPaid(), CR_PRICING_NET_PAID),
+ getOrNull(row, row.getCrPricing.getExtTax(), CR_PRICING_EXT_TAX),
+ getOrNull(row, row.getCrPricing.getNetPaidIncludingTax(),
CR_PRICING_NET_PAID_INC_TAX),
+ getOrNull(row, row.getCrPricing.getFee(), CR_PRICING_FEE),
+ getOrNull(row, row.getCrPricing.getExtShipCost(),
CR_PRICING_EXT_SHIP_COST),
+ getOrNull(row, row.getCrPricing.getRefundedCash(),
CR_PRICING_REFUNDED_CASH),
+ getOrNull(row, row.getCrPricing.getReversedCharge(),
CR_PRICING_REVERSED_CHARGE),
+ getOrNull(row, row.getCrPricing.getStoreCredit(),
CR_PRICING_STORE_CREDIT),
+ getOrNull(row, row.getCrPricing.getNetLoss(), CR_PRICING_NET_LOSS))
+ }
+
+ implicit class CatalogSalesRowImplicits(catalogSalesRow: CatalogSalesRow) {
+ def getCsSoldDateSk: Long =
CatalogSalesRowImplicits.csSoldDateSk.get(catalogSalesRow)
+ def getCsSoldTimeSk: Long =
CatalogSalesRowImplicits.csSoldTimeSk.get(catalogSalesRow)
+ def getCsShipDateSk: Long =
CatalogSalesRowImplicits.csShipDateSk.get(catalogSalesRow)
+ def getCsBillCustomerSk: Long =
CatalogSalesRowImplicits.csBillCustomerSk.get(catalogSalesRow)
+ def getCsBillCdemoSk: Long =
CatalogSalesRowImplicits.csBillCdemoSk.get(catalogSalesRow)
+ def getCsBillHdemoSk: Long =
CatalogSalesRowImplicits.csBillHdemoSk.get(catalogSalesRow)
+ def getCsBillAddrSk: Long =
CatalogSalesRowImplicits.csBillAddrSk.get(catalogSalesRow)
+ def getCsShipCustomerSk: Long =
CatalogSalesRowImplicits.csShipCustomerSk.get(catalogSalesRow)
+ def getCsShipCdemoSk: Long =
CatalogSalesRowImplicits.csShipCdemoSk.get(catalogSalesRow)
+ def getCsShipHdemoSk: Long =
CatalogSalesRowImplicits.csShipHdemoSk.get(catalogSalesRow)
+ def getCsShipAddrSk: Long =
CatalogSalesRowImplicits.csShipAddrSk.get(catalogSalesRow)
+ def getCsCallCenterSk: Long =
CatalogSalesRowImplicits.csCallCenterSk.get(catalogSalesRow)
+ def getCsCatalogPageSk: Long =
CatalogSalesRowImplicits.csCatalogPageSk.get(catalogSalesRow)
+ def getCsShipModeSk: Long =
CatalogSalesRowImplicits.csShipModeSk.get(catalogSalesRow)
+ def getCsWarehouseSk: Long =
CatalogSalesRowImplicits.csWarehouseSk.get(catalogSalesRow)
+ def getCsSoldItemSk: Long =
CatalogSalesRowImplicits.csSoldItemSk.get(catalogSalesRow)
+ def getCsPromoSk: Long =
CatalogSalesRowImplicits.csPromoSk.get(catalogSalesRow)
+ def getCsOrderNumber: Long =
CatalogSalesRowImplicits.csOrderNumber.get(catalogSalesRow)
+ def getCsPricing: Pricing =
CatalogSalesRowImplicits.csPricing.get(catalogSalesRow)
+ }
+
+ object CatalogSalesRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[CatalogSalesRow], field)
+ .buildChecked[T]()
+
+ lazy val csSoldDateSk = invoke[Long]("csSoldDateSk")
+ lazy val csSoldTimeSk = invoke[Long]("csSoldTimeSk")
+ lazy val csShipDateSk = invoke[Long]("csShipDateSk")
+ lazy val csBillCustomerSk = invoke[Long]("csBillCustomerSk")
+ lazy val csBillCdemoSk = invoke[Long]("csBillCdemoSk")
+ lazy val csBillHdemoSk = invoke[Long]("csBillHdemoSk")
+ lazy val csBillAddrSk = invoke[Long]("csBillAddrSk")
+ lazy val csShipCustomerSk = invoke[Long]("csShipCustomerSk")
+ lazy val csShipCdemoSk = invoke[Long]("csShipCdemoSk")
+ lazy val csShipHdemoSk = invoke[Long]("csShipHdemoSk")
+ lazy val csShipAddrSk = invoke[Long]("csShipAddrSk")
+ lazy val csCallCenterSk = invoke[Long]("csCallCenterSk")
+ lazy val csCatalogPageSk = invoke[Long]("csCatalogPageSk")
+ lazy val csShipModeSk = invoke[Long]("csShipModeSk")
+ lazy val csWarehouseSk = invoke[Long]("csWarehouseSk")
+ lazy val csSoldItemSk = invoke[Long]("csSoldItemSk")
+ lazy val csPromoSk = invoke[Long]("csPromoSk")
+ lazy val csOrderNumber = invoke[Long]("csOrderNumber")
+ lazy val csPricing = invoke[Pricing]("csPricing")
+
+ def values(row: CatalogSalesRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getCsSoldDateSk, CS_SOLD_DATE_SK),
+ getOrNullForKey(row, row.getCsSoldTimeSk, CS_SOLD_TIME_SK),
+ getOrNullForKey(row, row.getCsShipDateSk, CS_SHIP_DATE_SK),
+ getOrNullForKey(row, row.getCsBillCustomerSk, CS_BILL_CUSTOMER_SK),
+ getOrNullForKey(row, row.getCsBillCdemoSk, CS_BILL_CDEMO_SK),
+ getOrNullForKey(row, row.getCsBillHdemoSk, CS_BILL_HDEMO_SK),
+ getOrNullForKey(row, row.getCsBillAddrSk, CS_BILL_ADDR_SK),
+ getOrNullForKey(row, row.getCsShipCustomerSk, CS_SHIP_CUSTOMER_SK),
+ getOrNullForKey(row, row.getCsShipCdemoSk, CS_SHIP_CDEMO_SK),
+ getOrNullForKey(row, row.getCsShipHdemoSk, CS_SHIP_HDEMO_SK),
+ getOrNullForKey(row, row.getCsShipAddrSk, CS_SHIP_ADDR_SK),
+ getOrNullForKey(row, row.getCsCallCenterSk, CS_CALL_CENTER_SK),
+ getOrNullForKey(row, row.getCsCatalogPageSk, CS_CATALOG_PAGE_SK),
+ getOrNullForKey(row, row.getCsShipModeSk, CS_SHIP_MODE_SK),
+ getOrNull(row, row.getCsWarehouseSk, CS_WAREHOUSE_SK),
+ getOrNullForKey(row, row.getCsSoldItemSk, CS_SOLD_ITEM_SK),
+ getOrNullForKey(row, row.getCsPromoSk, CS_PROMO_SK),
+ getOrNull(row, row.getCsOrderNumber, CS_ORDER_NUMBER),
+ getOrNull(row, row.getCsPricing.getQuantity(), CS_PRICING_QUANTITY),
+ getOrNull(row, row.getCsPricing.getWholesaleCost(),
CS_PRICING_WHOLESALE_COST),
+ getOrNull(row, row.getCsPricing.getListPrice(), CS_PRICING_LIST_PRICE),
+ getOrNull(row, row.getCsPricing.getSalesPrice(), CS_PRICING_SALES_PRICE),
+ getOrNull(row, row.getCsPricing.getExtDiscountAmount(),
CS_PRICING_EXT_DISCOUNT_AMOUNT),
+ getOrNull(row, row.getCsPricing.getExtSalesPrice(),
CS_PRICING_EXT_SALES_PRICE),
+ getOrNull(row, row.getCsPricing.getExtWholesaleCost(),
CS_PRICING_EXT_WHOLESALE_COST),
+ getOrNull(row, row.getCsPricing.getExtListPrice(),
CS_PRICING_EXT_LIST_PRICE),
+ getOrNull(row, row.getCsPricing.getExtTax(), CS_PRICING_EXT_TAX),
+ getOrNull(row, row.getCsPricing.getCouponAmount(),
CS_PRICING_COUPON_AMT),
+ getOrNull(row, row.getCsPricing.getExtShipCost(),
CS_PRICING_EXT_SHIP_COST),
+ getOrNull(row, row.getCsPricing.getNetPaid(), CS_PRICING_NET_PAID),
+ getOrNull(row, row.getCsPricing.getNetPaidIncludingTax(),
CS_PRICING_NET_PAID_INC_TAX),
+ getOrNull(row, row.getCsPricing.getNetPaidIncludingShipping(),
CS_PRICING_NET_PAID_INC_SHIP),
+ getOrNull(
+ row,
+ row.getCsPricing.getNetPaidIncludingShippingAndTax(),
+ CS_PRICING_NET_PAID_INC_SHIP_TAX),
+ getOrNull(row, row.getCsPricing.getNetProfit(), CS_PRICING_NET_PROFIT))
+ }
+
+ implicit class WebPageRowImplicits(webPageRow: WebPageRow) {
+ def getWpPageSk: Long = WebPageRowImplicits.wpPageSk.get(webPageRow)
+ def getWpPageId: String = WebPageRowImplicits.wpPageId.get(webPageRow)
+ def getWpRecStartDateId: Long =
WebPageRowImplicits.wpRecStartDateId.get(webPageRow)
+ def getWpRecEndDateId: Long =
WebPageRowImplicits.wpRecEndDateId.get(webPageRow)
+ def getWpCreationDateSk: Long =
WebPageRowImplicits.wpCreationDateSk.get(webPageRow)
+ def getWpAccessDateSk: Long =
WebPageRowImplicits.wpAccessDateSk.get(webPageRow)
+ def isWpAutogenFlag: Boolean =
WebPageRowImplicits.wpAutogenFlag.get(webPageRow)
+ def getWpCustomerSk: Long =
WebPageRowImplicits.wpCustomerSk.get(webPageRow)
+ def getWpUrl: String = WebPageRowImplicits.wpUrl.get(webPageRow)
+ def getWpType: String = WebPageRowImplicits.wpType.get(webPageRow)
+ def getWpCharCount: Int = WebPageRowImplicits.wpCharCount.get(webPageRow)
+ def getWpLinkCount: Int = WebPageRowImplicits.wpLinkCount.get(webPageRow)
+ def getWpImageCount: Int = WebPageRowImplicits.wpImageCount.get(webPageRow)
+ def getWpMaxAdCount: Int = WebPageRowImplicits.wpMaxAdCount.get(webPageRow)
+ }
+
+ object WebPageRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[WebPageRow], field)
+ .buildChecked[T]()
+
+ lazy val wpPageSk = invoke[Long]("wpPageSk")
+ lazy val wpPageId = invoke[String]("wpPageId")
+ lazy val wpRecStartDateId = invoke[Long]("wpRecStartDateId")
+ lazy val wpRecEndDateId = invoke[Long]("wpRecEndDateId")
+ lazy val wpCreationDateSk = invoke[Long]("wpCreationDateSk")
+ lazy val wpAccessDateSk = invoke[Long]("wpAccessDateSk")
+ lazy val wpAutogenFlag = invoke[Boolean]("wpAutogenFlag")
+ lazy val wpCustomerSk = invoke[Long]("wpCustomerSk")
+ lazy val wpUrl = invoke[String]("wpUrl")
+ lazy val wpType = invoke[String]("wpType")
+ lazy val wpCharCount = invoke[Int]("wpCharCount")
+ lazy val wpLinkCount = invoke[Int]("wpLinkCount")
+ lazy val wpImageCount = invoke[Int]("wpImageCount")
+ lazy val wpMaxAdCount = invoke[Int]("wpMaxAdCount")
+
+ def values(row: WebPageRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getWpPageSk, WP_PAGE_SK),
+ getOrNull(row, row.getWpPageId, WP_PAGE_ID),
+ getDateOrNullFromJulianDays(row, row.getWpRecStartDateId,
WP_REC_START_DATE_ID),
+ getDateOrNullFromJulianDays(row, row.getWpRecEndDateId,
WP_REC_END_DATE_ID),
+ getOrNullForKey(row, row.getWpCreationDateSk, WP_CREATION_DATE_SK),
+ getOrNullForKey(row, row.getWpAccessDateSk, WP_ACCESS_DATE_SK),
+ getOrNullForBoolean(row, row.isWpAutogenFlag, WP_AUTOGEN_FLAG),
+ getOrNullForKey(row, row.getWpCustomerSk, WP_CUSTOMER_SK),
+ getOrNull(row, row.getWpUrl, WP_URL),
+ getOrNull(row, row.getWpType, WP_TYPE),
+ getOrNull(row, row.getWpCharCount, WP_CHAR_COUNT),
+ getOrNull(row, row.getWpLinkCount, WP_LINK_COUNT),
+ getOrNull(row, row.getWpImageCount, WP_IMAGE_COUNT),
+ getOrNull(row, row.getWpMaxAdCount, WP_MAX_AD_COUNT))
+ }
+
+ implicit class CallCenterRowImplicits(callCenterRow: CallCenterRow) {
+ def getCcCallCenterSk: Long =
CallCenterRowImplicits.ccCallCenterSk.get(callCenterRow)
+ def getCcCallCenterId: String =
CallCenterRowImplicits.ccCallCenterId.get(callCenterRow)
+ def getCcRecStartDateId: Long =
CallCenterRowImplicits.ccRecStartDateId.get(callCenterRow)
+ def getCcRecEndDateId: Long =
CallCenterRowImplicits.ccRecEndDateId.get(callCenterRow)
+ def getCcClosedDateId: Long =
CallCenterRowImplicits.ccClosedDateId.get(callCenterRow)
+ def getCcOpenDateId: Long =
CallCenterRowImplicits.ccOpenDateId.get(callCenterRow)
+ def getCcName: String = CallCenterRowImplicits.ccName.get(callCenterRow)
+ def getCcClass: String = CallCenterRowImplicits.ccClass.get(callCenterRow)
+ def getCcEmployees: Int =
CallCenterRowImplicits.ccEmployees.get(callCenterRow)
+ def getCcSqFt: Int = CallCenterRowImplicits.ccSqFt.get(callCenterRow)
+ def getCcHours: String = CallCenterRowImplicits.ccHours.get(callCenterRow)
+ def getCcManager: String =
CallCenterRowImplicits.ccManager.get(callCenterRow)
+ def getCcMarketId: Int =
CallCenterRowImplicits.ccMarketId.get(callCenterRow)
+ def getCcMarketClass: String =
CallCenterRowImplicits.ccMarketClass.get(callCenterRow)
+ def getCcMarketDesc: String =
CallCenterRowImplicits.ccMarketDesc.get(callCenterRow)
+ def getCcMarketManager: String =
CallCenterRowImplicits.ccMarketManager.get(callCenterRow)
+ def getCcDivisionId: Int =
CallCenterRowImplicits.ccDivisionId.get(callCenterRow)
+ def getCcDivisionName: String =
CallCenterRowImplicits.ccDivisionName.get(callCenterRow)
+ def getCcCompany: Int = CallCenterRowImplicits.ccCompany.get(callCenterRow)
+ def getCcCompanyName: String =
CallCenterRowImplicits.ccCompanyName.get(callCenterRow)
+ def getCcAddress: Address =
CallCenterRowImplicits.ccAddress.get(callCenterRow)
+ def getCcTaxPercentage: TPCDSDecimal =
CallCenterRowImplicits.ccTaxPercentage.get(callCenterRow)
+ }
+
+ object CallCenterRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[CallCenterRow], field)
+ .buildChecked[T]()
+
+ lazy val ccCallCenterSk = invoke[Long]("ccCallCenterSk")
+ lazy val ccCallCenterId = invoke[String]("ccCallCenterId")
+ lazy val ccRecStartDateId = invoke[Long]("ccRecStartDateId")
+ lazy val ccRecEndDateId = invoke[Long]("ccRecEndDateId")
+ lazy val ccClosedDateId = invoke[Long]("ccClosedDateId")
+ lazy val ccOpenDateId = invoke[Long]("ccOpenDateId")
+ lazy val ccName = invoke[String]("ccName")
+ lazy val ccClass = invoke[String]("ccClass")
+ lazy val ccEmployees = invoke[Int]("ccEmployees")
+ lazy val ccSqFt = invoke[Int]("ccSqFt")
+ lazy val ccHours = invoke[String]("ccHours")
+ lazy val ccManager = invoke[String]("ccManager")
+ lazy val ccMarketId = invoke[Int]("ccMarketId")
+ lazy val ccMarketClass = invoke[String]("ccMarketClass")
+ lazy val ccMarketDesc = invoke[String]("ccMarketDesc")
+ lazy val ccMarketManager = invoke[String]("ccMarketManager")
+ lazy val ccDivisionId = invoke[Int]("ccDivisionId")
+ lazy val ccDivisionName = invoke[String]("ccDivisionName")
+ lazy val ccCompany = invoke[Int]("ccCompany")
+ lazy val ccCompanyName = invoke[String]("ccCompanyName")
+ lazy val ccAddress = invoke[Address]("ccAddress")
+ lazy val ccTaxPercentage = invoke[TPCDSDecimal]("ccTaxPercentage")
+
+ def values(row: CallCenterRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getCcCallCenterSk, CC_CALL_CENTER_SK),
+ getOrNull(row, row.getCcCallCenterId, CC_CALL_CENTER_ID),
+ getDateOrNullFromJulianDays(row, row.getCcRecStartDateId,
CC_REC_START_DATE_ID),
+ getDateOrNullFromJulianDays(row, row.getCcRecEndDateId,
CC_REC_END_DATE_ID),
+ getOrNullForKey(row, row.getCcClosedDateId, CC_CLOSED_DATE_ID),
+ getOrNullForKey(row, row.getCcOpenDateId, CC_OPEN_DATE_ID),
+ getOrNull(row, row.getCcName, CC_NAME),
+ getOrNull(row, row.getCcClass, CC_CLASS),
+ getOrNull(row, row.getCcEmployees, CC_EMPLOYEES),
+ getOrNull(row, row.getCcSqFt, CC_SQ_FT),
+ getOrNull(row, row.getCcHours, CC_HOURS),
+ getOrNull(row, row.getCcManager, CC_MANAGER),
+ getOrNull(row, row.getCcMarketId, CC_MARKET_ID),
+ getOrNull(row, row.getCcMarketClass, CC_MARKET_CLASS),
+ getOrNull(row, row.getCcMarketDesc, CC_MARKET_DESC),
+ getOrNull(row, row.getCcMarketManager, CC_MARKET_MANAGER),
+ getOrNull(row, row.getCcDivisionId, CC_DIVISION),
+ getOrNull(row, row.getCcDivisionName, CC_DIVISION_NAME),
+ getOrNull(row, row.getCcCompany, CC_COMPANY),
+ getOrNull(row, row.getCcCompanyName, CC_COMPANY_NAME),
+ getOrNull(row, row.getCcAddress.getStreetNumber, CC_STREET_NUMBER),
+ getOrNull(row, row.getCcAddress.getStreetName, CC_STREET_NAME),
+ getOrNull(row, row.getCcAddress.getStreetType, CC_STREET_TYPE),
+ getOrNull(row, row.getCcAddress.getSuiteNumber, CC_SUITE_NUMBER),
+ getOrNull(row, row.getCcAddress.getCity, CC_CITY),
+ getOrNull(row, row.getCcAddress.getCounty, CC_ADDRESS),
+ getOrNull(row, row.getCcAddress.getState, CC_STATE),
+ getOrNull(
+ row,
+ java.lang.String.format("%05d",
row.getCcAddress.getZip.asInstanceOf[Object]),
+ CC_ZIP),
+ getOrNull(row, row.getCcAddress.getCountry, CC_COUNTRY),
+ getOrNull(row, row.getCcAddress.getGmtOffset, CC_GMT_OFFSET),
+ getOrNull(row, row.getCcTaxPercentage, CC_TAX_PERCENTAGE))
+ }
+
+ implicit class CustomerAddressRowImplicits(customerAddressRow:
CustomerAddressRow) {
+ def getCaAddrSk: Long =
CustomerAddressRowImplicits.caAddrSk.get(customerAddressRow)
+ def getCaAddrId: String =
CustomerAddressRowImplicits.caAddrId.get(customerAddressRow)
+ def getCaAddress: Address =
CustomerAddressRowImplicits.caAddress.get(customerAddressRow)
+ def getCaLocationType: String =
+ CustomerAddressRowImplicits.caLocationType.get(customerAddressRow)
+ }
+
+ object CustomerAddressRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[CustomerAddressRow], field)
+ .buildChecked[T]()
+
+ lazy val caAddrSk = invoke[Long]("caAddrSk")
+ lazy val caAddrId = invoke[String]("caAddrId")
+ lazy val caAddress = invoke[Address]("caAddress")
+ lazy val caLocationType = invoke[String]("caLocationType")
+
+ def values(row: CustomerAddressRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getCaAddrSk, CA_ADDRESS_SK),
+ getOrNull(row, row.getCaAddrId, CA_ADDRESS_ID),
+ getOrNull(row, row.getCaAddress.getStreetNumber(),
CA_ADDRESS_STREET_NUM),
+ getOrNull(row, row.getCaAddress.getStreetName(), CA_ADDRESS_STREET_NAME),
+ getOrNull(row, row.getCaAddress.getStreetType(), CA_ADDRESS_STREET_TYPE),
+ getOrNull(row, row.getCaAddress.getSuiteNumber(), CA_ADDRESS_SUITE_NUM),
+ getOrNull(row, row.getCaAddress.getCity(), CA_ADDRESS_CITY),
+ getOrNull(row, row.getCaAddress.getCounty(), CA_ADDRESS_COUNTY),
+ getOrNull(row, row.getCaAddress.getState(), CA_ADDRESS_STATE),
+ getOrNull(
+ row,
+ java.lang.String.format("%05d",
row.getCaAddress.getZip.asInstanceOf[Object]),
+ CA_ADDRESS_ZIP),
+ getOrNull(row, row.getCaAddress.getCountry(), CA_ADDRESS_COUNTRY),
+ getOrNull(row, row.getCaAddress.getGmtOffset(), CA_ADDRESS_GMT_OFFSET),
+ getOrNull(row, row.getCaLocationType, CA_LOCATION_TYPE))
+ }
+
+ implicit class DateDimRowImplicits(dateDimRow: DateDimRow) {
+ def getDDateSk: Long = DateDimRowImplicits.dDateSk.get(dateDimRow)
+ def getDDateId: String = DateDimRowImplicits.dDateId.get(dateDimRow)
+ def getDMonthSeq: Int = DateDimRowImplicits.dMonthSeq.get(dateDimRow)
+ def getDWeekSeq: Int = DateDimRowImplicits.dWeekSeq.get(dateDimRow)
+ def getDQuarterSeq: Int = DateDimRowImplicits.dQuarterSeq.get(dateDimRow)
+ def getDYear: Int = DateDimRowImplicits.dYear.get(dateDimRow)
+ def getDDow: Int = DateDimRowImplicits.dDow.get(dateDimRow)
+ def getDMoy: Int = DateDimRowImplicits.dMoy.get(dateDimRow)
+ def getDDom: Int = DateDimRowImplicits.dDom.get(dateDimRow)
+ def getDQoy: Int = DateDimRowImplicits.dQoy.get(dateDimRow)
+ def getDFyYear: Int = DateDimRowImplicits.dFyYear.get(dateDimRow)
+ def getDFyQuarterSeq: Int =
DateDimRowImplicits.dFyQuarterSeq.get(dateDimRow)
+ def getDFyWeekSeq: Int = DateDimRowImplicits.dFyWeekSeq.get(dateDimRow)
+ def getDDayName: String = DateDimRowImplicits.dDayName.get(dateDimRow)
+ def isDHoliday: Boolean = DateDimRowImplicits.dHoliday.get(dateDimRow)
+ def isDWeekend: Boolean = DateDimRowImplicits.dWeekend.get(dateDimRow)
+ def isDFollowingHoliday: Boolean =
DateDimRowImplicits.dFollowingHoliday.get(dateDimRow)
+ def getDFirstDom: Int = DateDimRowImplicits.dFirstDom.get(dateDimRow)
+ def getDLastDom: Int = DateDimRowImplicits.dLastDom.get(dateDimRow)
+ def getDSameDayLy: Int = DateDimRowImplicits.dSameDayLy.get(dateDimRow)
+ def getDSameDayLq: Int = DateDimRowImplicits.dSameDayLq.get(dateDimRow)
+ def isDCurrentDay: Boolean =
DateDimRowImplicits.dCurrentDay.get(dateDimRow)
+ def isDCurrentWeek: Boolean =
DateDimRowImplicits.dCurrentWeek.get(dateDimRow)
+ def isDCurrentMonth: Boolean =
DateDimRowImplicits.dCurrentMonth.get(dateDimRow)
+ def isDCurrentQuarter: Boolean =
DateDimRowImplicits.dCurrentQuarter.get(dateDimRow)
+ def isDCurrentYear: Boolean =
DateDimRowImplicits.dCurrentYear.get(dateDimRow)
+ }
+
+ object DateDimRowImplicits {
+ def invoke[T](field: String): DynFields.UnboundField[T] =
+ DynFields.builder()
+ .hiddenImpl(classOf[DateDimRow], field)
+ .buildChecked[T]()
+
+ lazy val dDateSk = invoke[Long]("dDateSk")
+ lazy val dDateId = invoke[String]("dDateId")
+ lazy val dMonthSeq = invoke[Int]("dMonthSeq")
+ lazy val dWeekSeq = invoke[Int]("dWeekSeq")
+ lazy val dQuarterSeq = invoke[Int]("dQuarterSeq")
+ lazy val dYear = invoke[Int]("dYear")
+ lazy val dDow = invoke[Int]("dDow")
+ lazy val dMoy = invoke[Int]("dMoy")
+ lazy val dDom = invoke[Int]("dDom")
+ lazy val dQoy = invoke[Int]("dQoy")
+ lazy val dFyYear = invoke[Int]("dFyYear")
+ lazy val dFyQuarterSeq = invoke[Int]("dFyQuarterSeq")
+ lazy val dFyWeekSeq = invoke[Int]("dFyWeekSeq")
+ lazy val dDayName = invoke[String]("dDayName")
+ lazy val dHoliday = invoke[Boolean]("dHoliday")
+ lazy val dWeekend = invoke[Boolean]("dWeekend")
+ lazy val dFollowingHoliday = invoke[Boolean]("dFollowingHoliday")
+ lazy val dFirstDom = invoke[Int]("dFirstDom")
+ lazy val dLastDom = invoke[Int]("dLastDom")
+ lazy val dSameDayLy = invoke[Int]("dSameDayLy")
+ lazy val dSameDayLq = invoke[Int]("dSameDayLq")
+ lazy val dCurrentDay = invoke[Boolean]("dCurrentDay")
+ lazy val dCurrentWeek = invoke[Boolean]("dCurrentWeek")
+ lazy val dCurrentMonth = invoke[Boolean]("dCurrentMonth")
+ lazy val dCurrentQuarter = invoke[Boolean]("dCurrentQuarter")
+ lazy val dCurrentYear = invoke[Boolean]("dCurrentYear")
+
+ def values(row: DateDimRow): Array[Any] = Array(
+ getOrNullForKey(row, row.getDDateSk, D_DATE_SK),
+ getOrNull(row, row.getDDateId, D_DATE_ID),
+ getDateOrNullFromJulianDays(row, row.getDDateSk, D_DATE_SK),
+ getOrNull(row, row.getDMonthSeq, D_MONTH_SEQ),
+ getOrNull(row, row.getDWeekSeq, D_WEEK_SEQ),
+ getOrNull(row, row.getDQuarterSeq, D_QUARTER_SEQ),
+ getOrNull(row, row.getDYear, D_YEAR),
+ getOrNull(row, row.getDDow, D_DOW),
+ getOrNull(row, row.getDMoy, D_MOY),
+ getOrNull(row, row.getDDom, D_DOM),
+ getOrNull(row, row.getDQoy, D_QOY),
+ getOrNull(row, row.getDFyYear, D_FY_YEAR),
+ getOrNull(row, row.getDFyQuarterSeq, D_FY_QUARTER_SEQ),
+ getOrNull(row, row.getDFyWeekSeq, D_FY_WEEK_SEQ),
+ getOrNull(row, row.getDDayName, D_DAY_NAME),
+ getOrNull(
+ row,
+ java.lang.String.format(
+ "%4dQ%d",
+ row.getDYear.asInstanceOf[Object],
+ row.getDQoy.asInstanceOf[Object]),
+ D_QUARTER_NAME),
+ getOrNullForBoolean(row, row.isDHoliday, D_HOLIDAY),
+ getOrNullForBoolean(row, row.isDWeekend, D_WEEKEND),
+ getOrNullForBoolean(row, row.isDFollowingHoliday, D_FOLLOWING_HOLIDAY),
+ getOrNull(row, row.getDFirstDom, D_FIRST_DOM),
+ getOrNull(row, row.getDLastDom, D_LAST_DOM),
+ getOrNull(row, row.getDSameDayLy, D_SAME_DAY_LY),
+ getOrNull(row, row.getDSameDayLq, D_SAME_DAY_LQ),
+ getOrNullForBoolean(row, row.isDCurrentDay, D_CURRENT_DAY),
+ getOrNullForBoolean(row, row.isDCurrentWeek, D_CURRENT_WEEK),
+ getOrNullForBoolean(row, row.isDCurrentMonth, D_CURRENT_MONTH),
+ getOrNullForBoolean(row, row.isDCurrentQuarter, D_CURRENT_QUARTER),
+ getOrNullForBoolean(row, row.isDCurrentYear, D_CURRENT_YEAR))
+ }
+
+ def getValues: TableRow => Array[Any] = {
+ case row: StoreRow => StoreRowImplicits.values(row)
+ case row: ReasonRow => ReasonRowImplicits.values(row)
+ case row: DbgenVersionRow => DbgenVersionRowImplicits.values(row)
+ case row: ShipModeRow => ShipModeRowImplicits.values(row)
+ case row: IncomeBandRow => IncomeBandRowImplicits.values(row)
+ case row: ItemRow => ItemRowImplicits.values(row)
+ case row: CustomerDemographicsRow =>
CustomerDemographicsRowImplicits.values(row)
+ case row: TimeDimRow => TimeDimRowImplicits.values(row)
+ case row: WebSiteRow => WebSiteRowImplicits.values(row)
+ case row: HouseholdDemographicsRow =>
HouseholdDemographicsRowImplicits.values(row)
+ case row: PromotionRow => PromotionRowImplicits.values(row)
+ case row: CatalogPageRow => CatalogPageRowImplicits.values(row)
+ case row: WebSalesRow => WebSalesRowImplicits.values(row)
+ case row: StoreSalesRow => StoreSalesRowImplicits.values(row)
+ case row: InventoryRow => InventoryRowImplicits.values(row)
+ case row: WebReturnsRow => WebReturnsRowImplicits.values(row)
+ case row: WarehouseRow => WarehouseRowImplicits.values(row)
+ case row: CustomerRow => CustomerRowImplicits.values(row)
+ case row: StoreReturnsRow => StoreReturnsRowImplicits.values(row)
+ case row: CatalogReturnsRow => CatalogReturnsRowImplicits.values(row)
+ case row: CatalogSalesRow => CatalogSalesRowImplicits.values(row)
+ case row: WebPageRow => WebPageRowImplicits.values(row)
+ case row: CallCenterRow => CallCenterRowImplicits.values(row)
+ case row: CustomerAddressRow => CustomerAddressRowImplicits.values(row)
+ case row: DateDimRow => DateDimRowImplicits.values(row)
+ }
+}
+
+object KyuubiTPCDSTableRowWithNullsUtils {
+ private lazy val isNullMethod = DynMethods.builder("isNull")
+ .hiddenImpl(
+ classOf[TableRowWithNulls],
+ classOf[GeneratorColumn])
+ .build()
+
+ private def isNull(
+ row: TableRow,
+ column: GeneratorColumn): Boolean = isNullMethod.invoke[Boolean](row,
column)
+
+ def getDateOrNullFromJulianDays(
+ row: TableRow,
+ value: Long,
+ column: GeneratorColumn): Option[Long] = {
+ if (isNull(row, column) || value < 0) None else Some(value)
+ }
+
+ def getOrNullForKey(row: TableRow, value: Long, column: GeneratorColumn):
Option[Long] = {
+ if (isNull(row, column) || value == -1) None else Some(value)
+ }
+
+ def getOrNull[T](row: TableRow, value: T, column: GeneratorColumn):
Option[T] = {
+ if (isNull(row, column)) None else Some(value)
+ }
+
+ def getOrNullForBoolean(
+ row: TableRow,
+ value: Boolean,
+ column: GeneratorColumn): Option[Boolean] = {
+ if (isNull(row, column)) None else Some(value)
+ }
+}
diff --git
a/extensions/spark/kyuubi-spark-connector-tpcds/src/test/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSCatalogSuite.scala
b/extensions/spark/kyuubi-spark-connector-tpcds/src/test/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSCatalogSuite.scala
index f5c6563e7..0eed970a4 100644
---
a/extensions/spark/kyuubi-spark-connector-tpcds/src/test/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSCatalogSuite.scala
+++
b/extensions/spark/kyuubi-spark-connector-tpcds/src/test/scala/org/apache/kyuubi/spark/connector/tpcds/TPCDSCatalogSuite.scala
@@ -19,6 +19,8 @@ package org.apache.kyuubi.spark.connector.tpcds
import org.apache.spark.SparkConf
import org.apache.spark.sql.{AnalysisException, SparkSession}
+import org.apache.spark.sql.functions._
+import org.apache.spark.sql.types.DataTypes
import org.apache.spark.sql.util.CaseInsensitiveStringMap
import org.apache.kyuubi.KyuubiFunSuite
@@ -77,42 +79,6 @@ class TPCDSCatalogSuite extends KyuubiFunSuite {
}
}
- test("tpcds.tiny count") {
- val sparkConf = new SparkConf()
- .setMaster("local[*]")
- .set("spark.ui.enabled", "false")
- .set("spark.sql.catalogImplementation", "in-memory")
- .set("spark.sql.catalog.tpcds", classOf[TPCDSCatalog].getName)
- .set("spark.sql.cbo.enabled", "true")
- .set("spark.sql.cbo.planStats.enabled", "true")
- withSparkSession(SparkSession.builder.config(sparkConf).getOrCreate()) {
spark =>
- assert(spark.table("tpcds.tiny.call_center").count === 2)
- assert(spark.table("tpcds.tiny.catalog_page").count === 11718)
- assert(spark.table("tpcds.tiny.catalog_returns").count === 8923)
- assert(spark.table("tpcds.tiny.catalog_sales").count === 89807)
- assert(spark.table("tpcds.tiny.customer").count === 1000)
- assert(spark.table("tpcds.tiny.customer_address").count === 1000)
- assert(spark.table("tpcds.tiny.customer_demographics").count === 1920800)
- assert(spark.table("tpcds.tiny.date_dim").count === 73049)
- assert(spark.table("tpcds.tiny.household_demographics").count === 7200)
- assert(spark.table("tpcds.tiny.income_band").count === 20)
- assert(spark.table("tpcds.tiny.inventory").count === 261261)
- assert(spark.table("tpcds.tiny.item").count === 2000)
- assert(spark.table("tpcds.tiny.promotion").count === 3)
- assert(spark.table("tpcds.tiny.reason").count === 1)
- assert(spark.table("tpcds.tiny.ship_mode").count === 20)
- assert(spark.table("tpcds.tiny.store").count === 2)
- assert(spark.table("tpcds.tiny.store_returns").count === 11925)
- assert(spark.table("tpcds.tiny.store_sales").count === 120527)
- assert(spark.table("tpcds.tiny.time_dim").count === 86400)
- assert(spark.table("tpcds.tiny.warehouse").count === 1)
- assert(spark.table("tpcds.tiny.web_page").count === 2)
- assert(spark.table("tpcds.tiny.web_returns").count === 1152)
- assert(spark.table("tpcds.tiny.web_sales").count === 11876)
- assert(spark.table("tpcds.tiny.web_site").count === 2)
- }
- }
-
test("tpcds.sf1 stats") {
val sparkConf = new SparkConf()
.setMaster("local[*]")
@@ -174,4 +140,69 @@ class TPCDSCatalogSuite extends KyuubiFunSuite {
|| exception.message.contains("TABLE_OR_VIEW_NOT_FOUND"))
}
}
+
+ test("tpcds.tiny count and checksum") {
+ val sparkConf = new SparkConf()
+ .setMaster("local[*]")
+ .set("spark.ui.enabled", "false")
+ .set("spark.sql.catalogImplementation", "in-memory")
+ .set("spark.sql.catalog.tpcds", classOf[TPCDSCatalog].getName)
+ .set("spark.sql.cbo.enabled", "true")
+ .set("spark.sql.cbo.planStats.enabled", "true")
+ withSparkSession(SparkSession.builder.config(sparkConf).getOrCreate()) {
spark =>
+ tableInfo.foreach {
+ case (table, (expectCount, expectChecksum)) =>
+ val (count, checksum) = countAndchecksum(spark, table)
+ assert(count == expectCount)
+ assert(checksum == expectChecksum, s"table $table")
+ }
+ }
+ }
+
+ def countAndchecksum(spark: SparkSession, tableName: String): (String,
String) = {
+ val df = spark.table(tableName)
+ val cols = df.schema.map { field =>
+ concat(
+ when(col(field.name).isNull, lit('\u0000').cast("string"))
+ .otherwise(col(field.name).cast("string")),
+ lit('\u0001').cast("string"))
+ }
+
+ df.select(
+ crc32(concat(cols: _*))
+ .cast(DataTypes.createDecimalType(38, 0))
+ .as("row_checksum"))
+ .agg(
+ count("*").cast("string").as("count"),
+ sum("row_checksum").cast("string").as("checksum"))
+ .collect()
+ .map(r => (r.getString(0), r.getString(1)))
+ .head
+ }
+
+ private val tableInfo = Seq(
+ ("tpcds.tiny.call_center", ("2", "4584365911")),
+ ("tpcds.tiny.catalog_page", ("11718", "25416854987711")),
+ ("tpcds.tiny.catalog_returns", ("8923", "19045021547122")),
+ ("tpcds.tiny.catalog_sales", ("89807", "192355655243815")),
+ ("tpcds.tiny.customer", ("1000", "2120827330356")),
+ ("tpcds.tiny.customer_address", ("1000", "2161077976693")),
+ ("tpcds.tiny.customer_demographics", ("1920800", "4124183189708148")),
+ ("tpcds.tiny.date_dim", ("73049", "156926081012862")),
+ ("tpcds.tiny.household_demographics", ("7200", "15494873325812")),
+ ("tpcds.tiny.income_band", ("20", "41180951007")),
+ ("tpcds.tiny.inventory", ("261261", "561290989772724")),
+ ("tpcds.tiny.item", ("2000", "4254103006936")),
+ ("tpcds.tiny.promotion", ("3", "4984911899")),
+ ("tpcds.tiny.reason", ("1", "365440741")),
+ ("tpcds.tiny.ship_mode", ("20", "52349078860")),
+ ("tpcds.tiny.store", ("2", "2964682289")),
+ ("tpcds.tiny.store_returns", ("11925", "25400972943896")),
+ ("tpcds.tiny.store_sales", ("120527", "259296406856838")),
+ ("tpcds.tiny.time_dim", ("86400", "186045071019485")),
+ ("tpcds.tiny.warehouse", ("1", "2956768503")),
+ ("tpcds.tiny.web_page", ("2", "3215766118")),
+ ("tpcds.tiny.web_returns", ("1152", "2464383243098")),
+ ("tpcds.tiny.web_sales", ("11876", "25458905770096")),
+ ("tpcds.tiny.web_site", ("2", "3798438288")))
}