Schema- en gegevenstypetoewijzing in kopieeractiviteit

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

In dit artikel wordt beschreven hoe de kopieeractiviteit van Azure Data Factory schematoewijzing en gegevenstypetoewijzing uitvoert van brongegevens naar sinkgegevens.

Schematoewijzing

Standaardtoewijzing

Standaard worden brongegevens van kopieeractiviteiten toegewezen aan sink op kolomnamen op hoofdlettergevoelige wijze. Als sink niet bestaat, bijvoorbeeld schrijven naar een of meer bestanden, worden de bronveldnamen behouden als sinknamen. Als de sink al bestaat, moet deze alle kolommen bevatten die uit de bron worden gekopieerd. Dergelijke standaardtoewijzing ondersteunt flexibele schema's en schemadrift van bron naar sink van uitvoering tot uitvoering. Alle gegevens die worden geretourneerd door het brongegevensarchief kunnen naar sink worden gekopieerd.

Als uw bron tekstbestand zonder koptekstregel is, is expliciete toewijzing vereist omdat de bron geen kolomnamen bevat.

Expliciete toewijzing

U kunt ook expliciete toewijzing opgeven om de kolom-/veldtoewijzing van bron naar sink aan te passen op basis van uw behoeften. Met expliciete toewijzing kunt u alleen gedeeltelijke brongegevens naar sink kopiëren of brongegevens toewijzen aan sink met verschillende namen, of tabellaire/hiërarchische gegevens opnieuw vormgeven. Copy-activiteit:

  1. Leest de gegevens uit de bron en bepaalt het bronschema.
  2. Hiermee past u de gedefinieerde toewijzing toe.
  3. Schrijft de gegevens naar sink.

Meer informatie over:

U kunt de toewijzing configureren in de ontwerpinterface -> kopieeractiviteit -> toewijzingstabblad of programmatisch de toewijzing opgeven in de kopieeractiviteit ->translator eigenschap. De volgende eigenschappen worden ondersteund in translator ->mappings matrix -> objecten ->source en sink, die verwijst naar de specifieke kolom/het veld om gegevens toe te wijzen.

Eigenschappen Beschrijving Vereist
naam Naam van de bron- of sinkkolom/het veld. Aanvragen voor bron en sink in tabelvorm. Ja
Ordinale Kolomindex. Begin vanaf 1.
Toepassen en vereist bij gebruik van tekst met scheidingstekens zonder koptekstregel.
Nee
path JSON-padexpressie voor elk veld dat moet worden geëxtraheerd of toegewezen. Aanvragen voor hiërarchische bron en sink, bijvoorbeeld Azure Cosmos DB-, MongoDB- of REST-connectors.
Voor velden onder het hoofdobject begint het JSON-pad met de hoofdmap $; voor velden in de matrix die door collectionReference de eigenschap is gekozen, begint het JSON-pad van het matrixelement zonder $.
Nee
type Tussentijdse gegevenstype van de bron- of sinkkolom. Over het algemeen hoeft u deze eigenschap niet op te geven of te wijzigen. Meer informatie over toewijzing van gegevenstypen. Nee
cultuur Cultuur van de bron- of sinkkolom. Toepassen wanneer het type is Datetime of Datetimeoffset. De standaardwaarde is en-us.
Over het algemeen hoeft u deze eigenschap niet op te geven of te wijzigen. Meer informatie over toewijzing van gegevenstypen.
Nee
indeling Tekenreeks opmaken die moet worden gebruikt wanneer het type is Datetime of Datetimeoffset. Raadpleeg aangepaste tekenreeksen voor datum- en tijdnotatie voor het opmaken van datum/tijd. Over het algemeen hoeft u deze eigenschap niet op te geven of te wijzigen. Meer informatie over toewijzing van gegevenstypen. Nee

De volgende eigenschappen worden ondersteund naast translatormappings:

Eigenschappen Beschrijving Vereist
collectionReference Toepassen bij het kopiëren van gegevens uit een hiërarchische bron, zoals Azure Cosmos DB, MongoDB of REST-connectors.
Als u gegevens wilt herhalen en extraheren uit de objecten in een matrixveld met hetzelfde patroon en wilt converteren naar per rij per object, geeft u het JSON-pad van die matrix op om kruislings toe te passen.
Nee

Tabellaire bron naar sink in tabelvorm

Als u bijvoorbeeld gegevens wilt kopiëren van Salesforce naar Azure SQL Database en drie kolommen expliciet wilt toewijzen:

  1. Klik op het tabblad Kopiëren -> toewijzingstabblad op De knop Schema's importeren om zowel bron- als sinkschema's te importeren.

  2. Wijs de benodigde velden toe en sluit de rest uit of verwijder deze.

Tabellair toewijzen aan tabelvorm

Dezelfde toewijzing kan worden geconfigureerd als het volgende in de nettolading van de kopieeractiviteit (zie translator):

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "SalesforceSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "name": "Id" },
                    "sink": { "name": "CustomerID" }
                },
                {
                    "source": { "name": "Name" },
                    "sink": { "name": "LastName" }
                },
                {
                    "source": { "name": "LastModifiedDate" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

Als u gegevens wilt kopiëren uit tekstbestanden met scheidingstekens zonder koptekstregel, worden de kolommen vertegenwoordigd door rangschikken in plaats van namen.

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "DelimitedTextSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "ordinal": "1" },
                    "sink": { "name": "CustomerID" }
                }, 
                {
                    "source": { "ordinal": "2" },
                    "sink": { "name": "LastName" }
                }, 
                {
                    "source": { "ordinal": "3" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

Hiërarchische bron naar sink in tabelvorm

Wanneer u gegevens kopieert van een hiërarchische bron naar een tabellaire sink, ondersteunt de kopieeractiviteit de volgende mogelijkheden:

  • Gegevens extraheren uit objecten en matrices.
  • Meerdere objecten met hetzelfde patroon uit een matrix toepassen. In dat geval converteert u één JSON-object naar meerdere records in tabelvorm.

Voor geavanceerdere hiërarchische naar tabellaire transformatie kunt u Gegevensstroom gebruiken.

Als u bijvoorbeeld een MongoDB-brondocument hebt met de volgende inhoud:

{
    "id": {
        "$oid": "592e07800000000000000000"
    },
    "number": "01",
    "date": "20170122",
    "orders": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "name": "Seattle" } ]
}

En u wilt het kopiëren naar een tekstbestand in de volgende indeling met koptekstregel door de gegevens in de matrix (order_pd en order_price) af te vlakken en kruislingse join met de algemene hoofdgegevens (getal, datum en plaats) te koppelen:

orderNumber orderDate order_pd order_price plaats
01 20170122 P1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

U kunt een dergelijke toewijzing definiëren in de ontwerpinterface van Data Factory:

  1. Klik op het tabblad Kopiëren -> toewijzingstabblad op De knop Schema's importeren om zowel bron- als sinkschema's te importeren. Als de service de belangrijkste objecten bij het importeren van een schema steekt, kunt u het veld toevoegen aan de juiste laag in de hiërarchie. Beweeg de muisaanwijzer over een bestaande veldnaam en kies ervoor om een knooppunt, een object of een matrix toe te voegen.

  2. Selecteer de matrix waaruit u gegevens wilt herhalen en extraheren. Deze wordt automatisch ingevuld als verzamelingsreferentie. Houd er rekening mee dat er slechts één matrix wordt ondersteund voor een dergelijke bewerking.

  3. Wijs de benodigde velden toe aan de sink. De service bepaalt automatisch de bijbehorende JSON-paden voor de hiërarchische zijde.

Notitie

Voor records waarbij de matrix die is gemarkeerd als verzamelingsreferentie leeg is en het selectievakje is ingeschakeld, wordt de hele record overgeslagen.

Hiërarchisch toewijzen aan tabellaire gebruikersinterface

U kunt ook overschakelen naar geavanceerde editor. In dat geval kunt u de JSON-paden van de velden rechtstreeks bekijken en bewerken. Als u ervoor kiest om nieuwe toewijzingen toe te voegen in deze weergave, geeft u het JSON-pad op.

Hiërarchisch toewijzen aan tabelvorm met behulp van geavanceerde editor

Dezelfde toewijzing kan worden geconfigureerd als het volgende in de nettolading van de kopieeractiviteit (zie translator):

{
    "name": "CopyActivityHierarchicalToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "MongoDbV2Source" },
        "sink": { "type": "DelimitedTextSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "path": "$['number']" },
                    "sink": { "name": "orderNumber" }
                },
                {
                    "source": { "path": "$['date']" },
                    "sink": { "name": "orderDate" }
                },
                {
                    "source": { "path": "['prod']" },
                    "sink": { "name": "order_pd" }
                },
                {
                    "source": { "path": "['price']" },
                    "sink": { "name": "order_price" }
                },
                {
                    "source": { "path": "$['city'][0]['name']" },
                    "sink": { "name": "city" }
                }
            ],
            "collectionReference": "$['orders']"
        }
    },
    ...
}

Tabellaire/hiërarchische bron naar hiërarchische sink

De gebruikerservaringsstroom is vergelijkbaar met hiërarchische bron naar sink in tabelvorm.

Bij het kopiëren van gegevens uit een tabellaire bron naar een hiërarchische sink wordt schrijven naar een matrix binnen het object niet ondersteund.

Wanneer u gegevens kopieert van een hiërarchische bron naar een hiërarchische sink, kunt u de hiërarchie van de hele laag ook behouden door het object/de matrix te selecteren en toe te wijzen aan sink zonder de binnenste velden aan te raken.

Voor geavanceerdere transformatie van gegevens kunt u Gegevensstroom gebruiken.

Toewijzing parameteriseren

Als u een ge templatiseerde pijplijn wilt maken om een groot aantal objecten dynamisch te kopiëren, moet u bepalen of u de standaardtoewijzing kunt gebruiken of dat u expliciete toewijzing moet definiëren voor respectieve objecten.

Als expliciete toewijzing nodig is, kunt u het volgende doen:

  1. Definieer een parameter met objecttype op pijplijnniveau, bijvoorbeeld mapping.

  2. De toewijzing parameteriseren: op het tabblad Kopiëren -> toewijzing, kiest u ervoor om dynamische inhoud toe te voegen en selecteert u de bovenstaande parameter. De nettolading van de activiteit zou als volgt zijn:

    {
        "name": "CopyActivityHierarchicalToTabular",
        "type": "Copy",
        "typeProperties": {
            "source": {...},
            "sink": {...},
            "translator": {
                "value": "@pipeline().parameters.mapping",
                "type": "Expression"
            },
            ...
        }
    }
    
  3. Maak de waarde die moet worden doorgegeven aan de toewijzingsparameter. Dit moet het hele definitieobject translator zijn. Raadpleeg de voorbeelden in de sectie expliciete toewijzing . Voor een tabellaire bron naar een kopie van een tabellaire sink moet de waarde bijvoorbeeld zijn {"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]}.

Gegevenstypetoewijzing

Copy-activiteit voert brontypen naar sinktypen toe met de volgende stroom:

  1. Converteer van systeemeigen brongegevenstypen naar tussentijdse gegevenstypen die worden gebruikt door Azure Data Factory- en Synapse-pijplijnen.
  2. Converteer indien nodig automatisch tussentijdse gegevenstypen zodat deze overeenkomen met overeenkomende sinktypen, die van toepassing zijn op zowel standaardtoewijzingals expliciete toewijzing.
  3. Converteer van tussentijdse gegevenstypen naar systeemeigen sinkgegevenstypen.

Copy-activiteit ondersteunt momenteel de volgende tussentijdse gegevenstypen: Booleaanse, Byte-, Bytematrix, Datetime, DatetimeOffset, Decimal, Double, GUID, Int32, Int64, SByte, Single, String, UInt16, UInt32 en UInt64.

De volgende conversies van gegevenstypen worden ondersteund tussen de tussentijdse typen van bron naar sink.

Bron\sink Booleaanse waarde Bytematrix Datum/tijd Decimal Float-point GUID Geheel getal String TimeSpan
Booleaanse waarde
Bytematrix
Datum/tijd
Decimal
Float-point
GUID
Geheel getal
String
TimeSpan

(1) Datum/tijd omvat DateTime en DateTimeOffset.

(2) Float-point omvat enkel en dubbel.

(3) Geheel getal omvat SByte, Byte, Int16, UInt16, Int32, UInt32, Int64 en UInt64.

Notitie

  • Op dit moment wordt deze conversie van gegevenstypen ondersteund bij het kopiëren tussen tabellaire gegevens. Hiërarchische bronnen/sinks worden niet ondersteund, wat betekent dat er geen door het systeem gedefinieerde gegevenstypeconversie is tussen de tussentijdse bron- en sinktypen.
  • Deze functie werkt met het nieuwste gegevenssetmodel. Als u deze optie niet ziet in de gebruikersinterface, probeert u een nieuwe gegevensset te maken.

De volgende eigenschappen worden ondersteund in kopieeractiviteit voor conversie van gegevenstypen (onder translator sectie voor programmatisch ontwerpen):

Eigenschappen Beschrijving Vereist
typeConversion Schakel de conversie-ervaring van het nieuwe gegevenstype in.
De standaardwaarde is onwaar vanwege compatibiliteit met eerdere versies.

Voor nieuwe kopieeractiviteiten die zijn gemaakt via de ontwerpgebruikersinterface van Data Factory sinds eind juni 2020, is deze conversie van het gegevenstype standaard ingeschakeld voor de beste ervaring en ziet u de volgende typeconversie-instellingen voor kopieeractiviteit:> tabblad Toewijzing voor toepasselijke scenario's.
Als u pijplijn programmatisch wilt maken, moet u expliciet de eigenschap instellen typeConversion op true om deze in te schakelen.
Voor bestaande kopieeractiviteiten die zijn gemaakt voordat deze functie wordt uitgebracht, ziet u geen opties voor typeconversie in de ontwerpinterface voor compatibiliteit met eerdere versies.
Nee
typeConversion Instellingen Een groep conversie-instellingen voor het type. Toepassen wanneer typeConversion is ingesteld op true. De volgende eigenschappen bevinden zich allemaal onder deze groep. Nee
Onder typeConversionSettings
allowDataTruncation Sta afkapping van gegevens toe bij het converteren van brongegevens naar sink met een ander type tijdens het kopiëren, bijvoorbeeld van decimaal naar geheel getal, van DatetimeOffset naar Datetime.
De standaardwaarde is true.
Nee
Behandelt BooleaanseAsNumber Booleaanse waarden behandelen als getallen, bijvoorbeeld waar als 1.
De standaardwaarde is false.
Nee
dateTimeFormat Tekenreeks opmaken bij het converteren tussen datums zonder tijdzone-offset en tekenreeksen, yyyy-MM-dd HH:mm:ss.fffbijvoorbeeld. Raadpleeg tekenreeksen voor aangepaste datum- en tijdnotatie voor gedetailleerde informatie. Nee
dateTimeOffsetFormat Tekenreeks opmaken bij het converteren tussen datums met tijdzone-offset en tekenreeksen, yyyy-MM-dd HH:mm:ss.fff zzzbijvoorbeeld. Raadpleeg tekenreeksen voor aangepaste datum- en tijdnotatie voor gedetailleerde informatie. Nee
timeSpanFormat Tekenreeks opmaken bij het converteren tussen tijdsperioden en tekenreeksen, bijvoorbeeld dd\.hh\:mm. Raadpleeg tekenreeksen voor aangepaste tijdspan-indeling voor gedetailleerde informatie. Nee
cultuur Cultuurgegevens die moeten worden gebruikt bij het converteren van typen, bijvoorbeeld en-us of fr-fr. Nee

Voorbeeld:

{
    "name": "CopyActivity",
    "type": "Copy",
    "typeProperties": {
        "source": {
        	"type": "ParquetSource"
        },
        "sink": {
            "type": "SqlSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "typeConversion": true,
            "typeConversionSettings": {
                "allowDataTruncation": true,
                "treatBooleanAsNumber": true,
                "dateTimeFormat": "yyyy-MM-dd HH:mm:ss.fff",
                "dateTimeOffsetFormat": "yyyy-MM-dd HH:mm:ss.fff zzz",
                "timeSpanFormat": "dd\.hh\:mm",
                "culture": "en-gb"
            }
        }
	},
    ...
}

Verouderde modellen

Notitie

De volgende modellen voor het toewijzen van bronkolommen/-velden aan sink worden nog steeds ondersteund, net als voor achterwaartse compatibiliteit. U wordt aangeraden het nieuwe model te gebruiken dat wordt vermeld in schematoewijzing. De ontwerpgebruikersinterface is overgeschakeld naar het genereren van het nieuwe model.

Alternatieve kolomtoewijzing (verouderd model)

U kunt kopieeractiviteit opgeven :>translator>columnMappings om toe te wijzen tussen gegevens in tabelvorm. In dit geval is de sectie Structuur vereist voor zowel invoer- als uitvoergegevenssets. Kolomtoewijzing ondersteunt het toewijzen van alle of subset van kolommen in de brongegevensset 'structuur' aan alle kolommen in de sinkgegevensset 'structuur'. Hier volgen foutvoorwaarden die resulteren in een uitzondering:

  • Het queryresultaat van het brongegevensarchief heeft geen kolomnaam die is opgegeven in de sectie Structuur van de invoergegevensset.
  • Sink-gegevensarchief (als met vooraf gedefinieerd schema) geen kolomnaam heeft die is opgegeven in de sectie 'structuur' van de uitvoergegevensset.
  • Minder kolommen of meer kolommen in de 'structuur' van de sinkgegevensset dan is opgegeven in de toewijzing.
  • Dubbele toewijzing.

In het volgende voorbeeld heeft de invoergegevensset een structuur en verwijst deze naar een tabel in een on-premises Oracle-database.

{
    "name": "OracleDataset",
    "properties": {
        "structure":
         [
            { "name": "UserId"},
            { "name": "Name"},
            { "name": "Group"}
         ],
        "type": "OracleTable",
        "linkedServiceName": {
            "referenceName": "OracleLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SourceTable"
        }
    }
}

In dit voorbeeld heeft de uitvoergegevensset een structuur en verwijst deze naar een tabel in Salesforce.

{
    "name": "SalesforceDataset",
    "properties": {
        "structure":
        [
            { "name": "MyUserId"},
            { "name": "MyName" },
            { "name": "MyGroup"}
        ],
        "type": "SalesforceObject",
        "linkedServiceName": {
            "referenceName": "SalesforceLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SinkTable"
        }
    }
}

De volgende JSON definieert een kopieeractiviteit in een pijplijn. De kolommen van de bron die zijn toegewezen aan kolommen in sink met behulp van de eigenschap translator ->columnMappings .

{
    "name": "CopyActivity",
    "type": "Copy",
    "inputs": [
        {
            "referenceName": "OracleDataset",
            "type": "DatasetReference"
        }
    ],
    "outputs": [
        {
            "referenceName": "SalesforceDataset",
            "type": "DatasetReference"
        }
    ],
    "typeProperties":    {
        "source": { "type": "OracleSource" },
        "sink": { "type": "SalesforceSink" },
        "translator":
        {
            "type": "TabularTranslator",
            "columnMappings":
            {
                "UserId": "MyUserId",
                "Group": "MyGroup",
                "Name": "MyName"
            }
        }
    }
}

Als u de syntaxis van het opgeven van "columnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName" kolomtoewijzing gebruikt, wordt deze nog steeds ondersteund.

Alternatieve schematoewijzing (verouderd model)

U kunt kopieeractiviteit opgeven:>translator>schemaMapping om toe te wijzen tussen hiërarchische gegevens en tabelvormige gegevens, bijvoorbeeld kopiëren van MongoDB/REST naar tekstbestand en kopiëren van Oracle naar Azure Cosmos DB voor MongoDB. De volgende eigenschappen worden ondersteund in de sectie kopieeractiviteit translator :

Eigenschappen Beschrijving Vereist
type De typeeigenschap van de kopieeractiviteitvertaler moet worden ingesteld op: Tabellair Vertalen Ja
schemaMapping Een verzameling sleutel-waardeparen, die de toewijzingsrelatie van de bronzijde tot de sink-zijde vertegenwoordigt.
- Sleutel: vertegenwoordigt de bron. Geef voor de tabellaire bron de kolomnaam op zoals gedefinieerd in de structuur van de gegevensset. Geef voor hiërarchische bron de JSON-padexpressie op voor elk veld dat moet worden geëxtraheerd en toegewezen.
- Waarde: vertegenwoordigt sink. Geef voor de sink in tabelvorm de kolomnaam op zoals gedefinieerd in de structuur van de gegevensset. Geef voor hiërarchische sink de JSON-padexpressie op voor elk veld dat moet worden geëxtraheerd en toegewezen.
In het geval van hiërarchische gegevens begint het JSON-pad voor velden onder hoofdobject met root $; voor velden in de matrix die door collectionReference de eigenschap is gekozen, begint het JSON-pad vanaf het matrixelement.
Ja
collectionReference Als u gegevens wilt herhalen en extraheren uit de objecten in een matrixveld met hetzelfde patroon en wilt converteren naar per rij per object, geeft u het JSON-pad van die matrix op om kruislings toe te passen. Deze eigenschap wordt alleen ondersteund wanneer hiërarchische gegevens bron zijn. Nee

Voorbeeld: kopiëren van MongoDB naar Oracle:

Als u bijvoorbeeld een MongoDB-document hebt met de volgende inhoud:

{
    "id": {
        "$oid": "592e07800000000000000000"
    },
    "number": "01",
    "date": "20170122",
    "orders": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "name": "Seattle" } ]
}

en u wilt deze kopiëren naar een Azure SQL-tabel in de volgende indeling door de gegevens in de matrix (order_pd en order_price) af te vlakken en kruislings samenvoegen met de algemene basisgegevens (getal, datum en plaats):

orderNumber orderDate order_pd order_price plaats
01 20170122 P1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

Configureer de regel voor schematoewijzing als het volgende JSON-voorbeeld van kopieeractiviteit:

{
    "name": "CopyFromMongoDBToOracle",
    "type": "Copy",
    "typeProperties": {
        "source": {
            "type": "MongoDbV2Source"
        },
        "sink": {
            "type": "OracleSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "schemaMapping": {
                "$.number": "orderNumber",
                "$.date": "orderDate",
                "prod": "order_pd",
                "price": "order_price",
                "$.city[0].name": "city"
            },
            "collectionReference":  "$.orders"
        }
    }
}

Zie de andere artikelen over kopieeractiviteiten: